我一直在python/django中大量使用日期。爲了解決各種使用案例,我一直在盲目地嘗試各種不同的方法,直到其中一個工作,而沒有學習各種功能如何工作的邏輯。Django/python - 消除關於日期和時區感知的混淆
現在是關鍵時刻。我想問幾個關於django/python中錯綜複雜的日期和時區的問題。
如何解釋已有時區的datetime
對象?
爲了澄清,讓我們說我做到以下幾點:
>>> generate_a_datetime()
datetime.datetime(2015, 12, 2, 0, 0, tzinfo=<DstTzInfo 'Canada/Eastern' LMT-1 day, 18:42:00 STD>)
>>>
控制檯輸出似乎模棱兩可的對我說:
Q1)這datetime
對象說,這是2015-12-02
- 什麼是generate_a_datetime
功能說服力我?是否說「一個站在加拿大東部的人看他的日曆會看到」2015-12-02「?或是否意味着」這是「2015-12-02 UTC」......但別忘了調整這個東部加拿大時區「
django.utils.timezone.make_aware混淆了我
例如:!
>>> 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>)
>>>
的對象now_aware_with_django
和now_aware_with_datetime
似乎表現同樣,但他們的控制檯輸出表明他們是不同的。
Q2)是什麼now_aware_with_django
和now_aware_with_datetime
之間的區別?
Q3)我怎麼知道我是否需要使用timezone.make_aware
或datetime.replace
?
天真的日期時間與UTC日期時間
UTC
意味着是時間價值沒有變化。 「天真」似乎意味着時間沒有與時區相關聯。
Q4)樸素和UTC日期有什麼區別?看起來他們完全一樣 - 既沒有對實際時間值進行任何轉換。
Q5)我怎麼知道我什麼時候想要使用天真的時間,以及何時想使用UTC時間?
如果我能得到一個答案,所有5個問題將是積極出色的。非常感謝!
完美。 +1爲實用建議! –