莫名其妙的时区行为

时间:2015-04-03 19:15:41

标签: python timezone pytz

import datetime
import pytz # install from pip

US_PACIFIC_TIMEZONE = pytz.timezone("US/Pacific")

dt = datetime.datetime.utcnow().replace(tzinfo=US_PACIFIC_TIMEZONE)
print(dt == dt.replace(tzinfo=US_PACIFIC_TIMEZONE)) # True

dt = datetime.datetime.now(tz=US_PACIFIC_TIMEZONE)
print(dt == dt.replace(tzinfo=US_PACIFIC_TIMEZONE)) # False

所以看起来datetime.datetime.now(tz=..)没有设置为我指定的时区......

使用datetime.now时似乎设置了时区,但它按小时区域设置了。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

您问题中唯一正确的公式是:

dt = datetime.now(US_PACIFIC_TIMEZONE)

US_PACIFIC_TIMEZONE在不同日期可能会有不同的utc偏移,例如,由于DST转换。您不应该将.replace()方法(或tzinfo构造函数参数)与此类pytz时区一起使用。这是explanation on why you should not use replace() with pytz timezones that have a variable utc offset