莫名其妙的时区行为

Baffling timezone Behavior

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时好像设置了时区,但相差了一个时区。

这是为什么?

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

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.