【问题标题】:Howto convert Pandas Datetime Column from EST WITHOUT Day Light Savings adjustments into CET WITH Day Light Savings adjustments如何将 Pandas 日期时间列从没有夏令时调整的 EST 转换为有夏令时调整的 CET
【发布时间】:2019-11-20 00:50:20
【问题描述】:

我有一个包含日期时间列的数据集,其中时区是东部标准时间 (EST),没有进行夏令时调整。如何使用 pandas 将列转换为具有夏令时调整的中欧时间 (CET)?

我假设我必须通过使用 pandas.DataFrame.tz_localize 来识别列时区,然后使用 pandas.DataFrame.tz_convert 将支持 tz 的 Datetime 列从一个时区转换为另一个时区。如何设置正确的夏令时调整选项? 有人可以帮帮我吗?

【问题讨论】:

    标签: pandas datetime timezone dst


    【解决方案1】:

    听起来您已经有了从一个时区转换到另一个时区的方法,只需要知道如何指定时区以匹配您的用例。

    • 对于输入时区,如果所有数据确实来自 EST (UTC-5) 而没有夏令时,即使 EDT (UTC-4) 可能在美国东部时间生效,则使用标识符Etc/GMT+5。 (注意倒置符号+ 是正确的,因为这里不值得一提。)这是一个固定偏移区域,所以你并不是真正应用“东部时间”,而只是应用“UTC-5”。

    • 对于输出时区,请确定要转换到的中欧位置。这很重要,因为并非每个使用 CET/CEST 的位置都始终以相同的方式对齐。例如,您可以选择Europe/ParisEurope/BerlinEurope/Budapest 等等。

    您可以找到这些时区标识符here 的列表。

    【讨论】:

    • 您好,Matt Johnson-Pint,非常感谢您的帮助。抱歉,这么晚才回复。这意味着我只需要执行以下步骤:1)从 EST 转换为 UTC(无夏令时) 2)从 UTC 转换为 CET(有夏令时)3)删除时区信息 => naive datetime (df ['datetime']+pd.Timedelta(hours=5)).dt.tz_localize('UTC').dt.tz_convert('Europe/Berlin').dt.tz_localize(None)
    • 第三步“删除时区信息”可能会导致时间从夏季时间调整到冬季时间的日期出现问题,因为我会得到重复的日期时间。所以这应该是我的情况下最好的解决方案: (df['datetime']+pd.Timedelta(hours=5)).dt.tz_localize('UTC').dt.tz_convert('Europe/Berlin' )
    • 为什么是+?为什么不用df['datetime'].dt.tz_localize('Etc/GMT+5').tz_convert('Europe/Berlin') 之类的东西?如果源是 tz 感知的,则您不必在中间经过 UTC。
    • 嗨,马特,我对夏令时的处理不是 100% 确定的。但是 df['datetime'].dt.tz_localize('Etc/GMT+5').dt.tz_convert('Europe/Berlin') 提供完全相同的结果。感谢您的帮助。
    猜你喜欢
    • 2017-03-02
    • 2020-05-22
    • 2017-08-28
    • 1970-01-01
    • 2011-11-05
    • 2012-06-06
    • 2015-08-04
    • 1970-01-01
    • 2012-04-07
    相关资源
    最近更新 更多