datetime.datetime.utcnow()为什么没有tzinfo?

问题:

datetime.datetime.utcnow()

为什么datetime没有任何时区信息,因为它明确地是UTC datetime
我会期望这将包含tzinfo

回答:

这意味着它是时区天真的,所以你不能使用它与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()

#!/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转换结束时失败。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: datetime.datetime.utcnow() why no tzinfo?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

25 − 19 =