莫名其妙的时区行为
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.
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.