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

mar*_*lli 2 python timezone datetime 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
Run Code Online (Sandbox Code Playgroud)

我很惊讶我得到了不同的结果Europe/MadridEtc/GMT+1。为什么是这样?应该Europe/Madrid以不同的方式使用,或者这可能是一个错误?

Mat*_*int 6

一些东西:

\n\n
    \n
  • Europe/Madrid标准时间为 UTC+1,夏令时(又称夏令时)为 UTC+2。

  • \n
  • Etc/GMT+1全年为 UTC-1。请注意,该标志与您可能期望的相反。请参阅tzdata来源和Wikipedia 中的解释。

  • \n
  • 由于马德里在您提供的日期采用 UTC+1,因此如果您使用 ,您将获得该日期的相同结果Etc/GMT-1。但是,我不建议这样做,因为您稍后会得到夏季日期的错误结果。

  • \n
  • 这些Etc/GMT\xc2\xb1X区域主要用于不可定位的场景,例如跟踪海上船上的时间,而不是陆地上人口稠密的地点。

  • \n
  • 正如梅森的回答所示,您应该使用该localize函数而不是replace分配时区。pytz 文档对此进行了介绍。

  • \n
\n