python - “欧洲/马德里”时区与 'Etc/GMT+1' 不匹配

标签 python datetime timezone pytz

我正在尝试将 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/MadridEtc/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/

相关文章:

python - matplotlib:在次要标签下绘制主要刻度标签

python - basemap : create figure with graph and map

python - 为什么python十进制库不为某些输入返回指定数量的有效数字

python - 在 django 中使用 dict_cursor

java - 不同时区的两个 java 日期之间经过的天数

python - django datetime.datetime 错误

java - 将字符串时间转换为本地时间以进行比较

r - 突变时间 (HH :MM:SS) to date (YYYY-MM-DD) accounting for midnight in R

python - 按偏移量排序的 Pytz 公共(public)时区

java - 在 DST 期间创建时间戳(某种程度上)的问题