为什么datetime.datetime.utcnow()不包含时区信息? [英] Why does datetime.datetime.utcnow() not contain timezone information?
问题描述
datetime.datetime.utcnow()
为什么此 datetime
没有任何时区信息,因为它明确地是UTC datetime
?
Why does this datetime
not have any timezone info given that it is explicitly a UTC datetime
?
我希望它会包含 tzinfo
。
推荐答案
这意味着它是时区幼稚的,所以您不能在 datetime.astimezone
That means it is timezone naive, so you can't use it with datetime.astimezone
您可以给它这样的时区
import pytz # 3rd party: $ pip install pytz
u = datetime.utcnow()
u = u.replace(tzinfo=pytz.utc) #NOTE: it works only with a fixed utc offset
现在您可以更改时区
print(u.astimezone(pytz.timezone("America/New_York")))
要获取给定时区的当前时间,您可以通过tzinfo直接到 datetime.now()
:
To get the current time in a given timezone, you could pass tzinfo to datetime.now()
directly:
#!/usr/bin/env python
from datetime import datetime
import pytz # $ pip install pytz
print(datetime.now(pytz.timezone("America/New_York")))
它适用于任何时区,包括那些遵守夏令时(DST)的时区,即它适用于在不同时间可能具有不同utc偏移量的时区(非固定utc偏移)。不要使用 tz.localize(datetime.now())
-在本地时间不明确的DST结束过渡期间,它可能会失败。
It works for any timezone including those that observe daylight saving time (DST) i.e., it works for timezones that may have different utc offsets at different times (non-fixed utc offset). Don't use tz.localize(datetime.now())
-- it may fail during end-of-DST transition when the local time is ambiguous.
这篇关于为什么datetime.datetime.utcnow()不包含时区信息?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!