我一直在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为实用建议! –