Ich habe intensiv mit Daten in Python/Django gearbeitet. Um verschiedene Anwendungsfälle zu lösen, habe ich blind verschiedene Ansätze getestet, bis einer von ihnen funktionierte, ohne die Logik zu verstehen, die dahinter steckt, wie die verschiedenen Funktionen funktionieren.Django/Python - Zerstreuung der Verwirrung in Bezug auf Daten und Zeitzonenbewusstsein
Jetzt ist es Crunch Time. Ich möchte ein paar Fragen bezüglich der Feinheiten von Daten und Zeitzonen in Django/Python stellen.
Wie interpretiere ich ein datetime
Objekt, das bereits eine Zeitzone hat?
Um zu klären, sagen wir, ich folgendes tun:
>>> generate_a_datetime()
datetime.datetime(2015, 12, 2, 0, 0, tzinfo=<DstTzInfo 'Canada/Eastern' LMT-1 day, 18:42:00 STD>)
>>>
Die Konsolenausgabe mir zweideutig erscheint:
Q1) Dieses datetime
Objekt sagt, ist 2015-12-02
- Was die Erzählung generate_a_datetime
Funktion ist mich? Sagt es, dass "ein Mann, der in Ostkanada steht, seinen Kalender betrachtend, sieht" 2015-12-02 "? ODER bedeutet es " Dieses ist "2015-12-02 UTC" ... aber nicht vergessen dies die östlichen Kanada-Zeitzone anzupassen“
django.utils.timezone.make_aware mich verwirrt
zum Beispiel:.
>>> from django.utils import timezone
>>> import pytz
>>> tz = pytz.timezone('Canada/Eastern')
>>> now_unaware = datetime.datetime.now()
>>> now_aware_with_django = timezone.make_aware(now_unaware, tz)
>>> now_aware_with_datetime = now_unaware.replace(tzinfo=tz)
>>> now_unaware
datetime.datetime(2015, 12, 2, 22, 1, 19, 564003)
>>> now_aware_with_django
datetime.datetime(2015, 12, 2, 22, 1, 19, 564003, tzinfo=<DstTzInfo 'Canada/Eastern' EST-1 day, 19:00:00 STD>)
>>> now_aware_with_datetime
datetime.datetime(2015, 12, 2, 22, 1, 19, 564003, tzinfo=<DstTzInfo 'Canada/Eastern' LMT-1 day, 18:42:00 STD>)
>>>
die Objekte now_aware_with_django
und now_aware_with_datetime
scheinen zu verhalten ähnlich, aber ihre Konsolenausgabe legt nahe, dass sie anders sind.
Q2) Was ist der Unterschied zwischen now_aware_with_django
und now_aware_with_datetime
?
Q3) Woher weiß ich, ob ich timezone.make_aware
oder datetime.replace
verwenden muss?
Naive Datetimes gegen UTC Datetime
UTC
bedeutet, dass es keine Änderung des Zeitwertes ist. "Naiv" scheint zu bedeuten, dass mit der Zeit keine Zeitzone verbunden ist.
Q4) Was ist der Unterschied zwischen naiven und UTC-Datumsangaben? Es sieht so aus, als ob sie genau gleich sind - und keine Veränderung des tatsächlichen Zeitwerts bewirken.
Q5) Woher weiß ich, wann ich naive Zeiten verwenden möchte und wann ich UTC-Zeiten verwenden möchte?
Wenn ich eine Antwort auf alle 5 Fragen bekommen könnte, wäre das positiv hervorragend. Vielen Dank!
Perfekt. +1 für die praktischen Empfehlungen! –