我一直在使用python/django中的日期进行广泛的工作.为了解决各种用例,我一直在盲目地尝试各种不同的方法,直到其中一个工作,而没有学习各种功能如何工作的逻辑.
现在是关键时刻.我想问一下关于django/python中日期和时区错综复杂的几个问题.
如何解释datetime
已有时区的对象?
为了澄清,让我说我做以下事情:
>>> generate_a_datetime() datetime.datetime(2015, 12, 2, 0, 0, tzinfo=) >>>
控制台输出对我来说似乎不明确:
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=) >>> now_aware_with_datetime datetime.datetime(2015, 12, 2, 22, 1, 19, 564003, tzinfo= ) >>>
该对象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)naive和UTC日期时间有什么区别?看起来它们完全相同 - 既没有对实际时间值进行任何转换.
Q5)我怎么知道我什么时候想要使用天真时间,以及什么时候想要使用UTC时间?
如果我能得到所有5个问题的答案,那将是非常出色的.非常感谢!