2 回答
TA贡献1801条经验 获得超8个赞
让我们更清楚地说明这里的内容:
madrid = pytz.timezone('Europe/Madrid')
欧洲/马德里时区,即 UTC+1/+2。
naive_ts = datetime.strptime('2019-03-01 14:45', '%Y-%m-%d %H:%M')
没有任何特定时区的朴素时间戳。
madrid_ts = madrid.localize(naive_ts)
相同的时间戳,现在附加时区 Europe/Madrid,即马德里的 14:45 (UTC+1)。
utc_ts = madrid_ts.astimezone(pytz.utc)
与UTC 中马德里的 14:45 (UTC+1) 相同,因此,14:45 - 1 小时 → 13:45。一切都在预料之中。如果在马德里是 14:45,那么在 UTC 是 13:45,因为马德里比 UTC 早一小时。
datetime.now()
不管是什么……它与上述两个时间戳中的任何一个都无关,并且取决于您机器的默认时区以及您执行此代码时的当前时间。
TA贡献1775条经验 获得超11个赞
我想你是误会localize和astimezone,因为你是创建2019年3月1日14:45在与欧洲/马德里时区的datetime对象localize,然后将其转换为UTC与astimezone它给你意想不到的结果。
相反,您似乎打算为 2019-03-01 14:45 创建一个日期时间对象,然后您想以欧洲/马德里时间和 UTC 时间显示该日期时间。您可以使用astimezone或localize来获得所需的结果。
astimezone 例子:
import datetime
import pytz
dt = datetime.datetime.strptime('2019-03-01 14:45','%Y-%m-%d %H:%M')
madrid_tz = pytz.timezone('Europe/Madrid')
madrid = dt.astimezone(madrid_tz)
print(madrid)
# 2019-03-01 15:45:00+01:00
utc = dt.astimezone(pytz.utc)
print(utc)
# 2019-03-01 14:45:00+00:00
localize 示例(请注意,日期时间对象是在对应于每个时区的时间创建的,因此两者将代表相同的时间点):
import datetime
import pytz
madrid_tz = pytz.timezone('Europe/Madrid')
madrid = madrid_tz.localize(datetime.datetime(2019, 3, 1, 15, 45))
print(madrid)
# 2019-03-01 15:45:00+01:00
utc = pytz.utc.localize(datetime.datetime(2019, 3, 1, 14, 45))
print(utc)
# 2019-03-01 14:45:00+00:00
添加回答
举报