代码之家  ›  专栏  ›  技术社区  ›  Deniz Dogan

Pytz和ETC/GMT-5

  •  6
  • Deniz Dogan  · 技术社区  · 14 年前

    我很难理解“etc/gmt-5”时区和pytz中的UTC之间的转换。

    >>> dt = datetime(2009, 9, 9, 10, 0) # September 9 2009, 10:00
    >>> gmt_5 = pytz.timezone("Etc/GMT-5")
    >>> gmt_5.localize(dt)
    datetime.datetime(2009, 9, 9, 10, 0, tzinfo=<StaticTzInfo 'Etc/GMT-5'>)
    

    到目前为止一切都很好,但是我尝试将其转换为UTC:

    >>> gmt_5.localize(dt).astimezone(pytz.utc)
    datetime.datetime(2009, 9, 9, 5, 0, tzinfo=<UTC>)
    

    所以在我看来,从格林尼治标准时间5点到UTC的10点,我得到了05点?我希望Pytz给我15点。

    我错过了什么?

    编辑: 我已经确认,美国/东部时区的时区转换工作与我预期的一样:

    >>> eastern = pytz.timezone("US/Eastern")
    >>> eastern.localize(dt)
    datetime.datetime(2009, 9, 9, 10, 0, tzinfo=...) # Too long
    >>> pytz.utc.normalize(eastern.localize(dt).astimezone(pytz.utc))
    datetime.datetime(2009, 9, 9, 14, 0, tzinfo=<UTC>)
    

    编辑2: 我已经确认,当我使用etc/gmt+5时,我得到15:00,这是我希望从etc/gmt-5得到的。这是Pytz病毒吗?

    2 回复  |  直到 14 年前
        1
  •  12
  •   adw    14 年前

    这显然是一种姿势。从 Wikipedia :

    为了符合POSIX样式,那些以“etc/gmt”开头的区域的符号与大多数人所期望的相反。在这种风格中,格林尼治标准时间以西的区域有一个积极的标志,以东的区域有一个消极的标志。

        2
  •  0
  •   Deniz Dogan    14 年前

    This bug report 解释这种行为。显然,他们知道这一切都是颠倒的,但这是因为其他任何东西都会破坏兼容性。