关于python:将Pandas时间戳的时区设置为Boise

Setting time zone of a Pandas Timestamp to Boise

我想在unix时间读入时间戳并分配Boise的时区。 当前时区有"MDT - 山区夏令时(夏令时)"。 在冬季,它将切换到MST。

什么是正确的时区使用,当我想要它不依赖于夏季/冬季时间?

我希望有这样的东西

1
pd.Timestamp(1513393355, unit='s', tz='US/Pacific')


一些东西:

  • 一般来说,在大多数美国山地时间应该使用America/Denver,目前在MST(UTC-7)和MDT(UTC-6)之间切换。

  • America/Phoenix用于当前未使用DST的US Mountain Time部分,例如适用于亚利桑那州的大多数(但不是全部)。

    • 但是,要注意它过去曾经有过DST,最后一次是在1968年。
  • 如果您需要一个UTC-7的固定偏移且从未使用过DST,请使用Etc/GMT+7。请注意偏移的符号是有意反转的(Etc/GMT+7 = UTC-7)。

    • 如果您将此区域用于海上船舶以外的任何时间,那么您应该重新评估此决定。换句话说,如果您的数据是针对使用DST的本地时区,那么您不应该选择忽略它的区域。
  • 您可以使用America/Boise,但是您应该只将其用于1974年末(1974-02-03而非1974-01-06)四周开始DST的爱达荷州南部和俄勒冈州东部地区,如TZ数据库评论中所述来源:

    1
    2
    3
    4
    5
    6
    7
    # Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine,
    # Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark,
    # Custer, Elmore, Franklin, Fremont, Gem, Gooding, Jefferson, Jerome,
    # Lemhi, Lincoln, Madison, Minidoka, Oneida, Owyhee, Payette, Power,
    # Teton, Twin Falls, Valley, Washington counties, and the southern
    # quarter of Idaho county) and eastern Oregon (most of Malheur County)
    # switched four weeks late in 1974.
    • 如果您不使用1974年的时间戳,那么您可以忽略此区域并使用America/Denver
  • 您可以使用US/Mountain,但要了解它是作为America/Denver的别名链接的,并且被视为已弃用。它存在向后兼容性。

    • 通常建议使用Area/Locality表单的规范标识符,而不是这些较旧的表示形式。请参阅Wikipedia上的TZ数据库时区列表。


这将1513393355解释为UTC中的时间戳,然后将时间戳转换为America/Boise时区:

1
2
In [57]: pd.Timestamp(1513393355, unit='s', tz='UTC').tz_convert('America/Boise')
Out[57]: Timestamp('2017-12-15 20:02:35-0700', tz='America/Boise')

大熊猫依靠pytz进行时区计算。 pytz取决于Olson数据库。 Olson数据库包含每个时区的utc偏移的历史记录。因此,您不必担心夏令时是否在特定日期生效。 tz_convert将为您处理。

您可以使用pytz.timezones查看所有选项。

有一个US/Mountain时区,但不推荐使用。
有关相关选项的更多权威信息,请参阅Matt Johnson的答案。