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
时似乎设置了时区,但它按小时区域设置了。
为什么会这样?
答案 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。