我正在尝试将 UTC 时间戳转换为西类牙时区的时间戳。
>>> import datetime as dt
>>> import pytz
>>> today = dt.datetime.utcfromtimestamp(1573516800)
datetime.datetime(2019, 11, 12, 0, 0)
>>> today.replace(tzinfo=pytz.timezone('Europe/Madrid')).timestamp()
1573517700.0
>>> today.replace(tzinfo=pytz.timezone('Etc/GMT+1')).timestamp()
1573520400.0
令我惊讶的是,Europe/Madrid
和 Etc/GMT+1
得到了不同的结果。为什么是这样? Europe/Madrid
是否应该以不同的方式使用,或者它可能是一个错误?
最佳答案
一些事情:
Europe/Madrid
标准时间为 UTC+1,夏令时为 UTC+2(又称夏令时)。Etc/GMT+1
是全年的 UTC-1。请注意,该标志与您的预期相反。请参阅 tzdata 中的说明来源,和on Wikipedia .由于马德里在您提供的日期使用 UTC+1,因此如果您使用
Etc/GMT-1
,您将获得与该日期相同的结果。但是,我不建议这样做,因为您稍后会得到错误的夏令时日期结果。Etc/GMT±X
区域主要用于不可本地化的场景,例如跟踪海上船上的时间 - 不适用于陆地上的人口稠密地点。作为Mason's answer显示,您应该使用
localize
函数而不是replace
来分配时区。这涵盖了in the pytz documentation .
关于python - “欧洲/马德里”时区与 'Etc/GMT+1' 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58820847/