【发布时间】:2020-11-07 16:08:09
【问题描述】:
如果我这样做
import pandas as pd
pd.to_datetime("2020-03-08") + pd.to_timedelta('1D')
我按预期得到了Timestamp('2020-03-09 00:00:00')。
但是当我尝试使用时区感知数据类型时..
pd.to_datetime("2020-03-08").tz_localize('America/New_York') + pd.to_timedelta('1D')
我收到Timestamp('2020-03-09 01:00:00-0400', tz='America/New_York'),这是午夜后一小时。
当您意识到 2020 年 3 月 8 日是夏令时时钟向前移动的那一天,而这一天只有 23 小时时,这实际上是有道理的。但是我有一个用例,我想要一个始终为一个“本地时间”一天的时间增量。
那么有没有办法创建一个“本地时间感知”的 timedelta 对象,以便“1D”代表一个日历日,无论这一天是 23、24 还是 25 小时长?
【问题讨论】:
-
您可以在 添加时间增量后进行本地化:
(pd.to_datetime("2020-03-08") + pd.to_timedelta('1D')).tz_localize('America/New_York') -
这行得通,但是在我正在处理的代码的更广泛上下文中,当我使用每小时时间序列时会产生不良行为。每当我与时间打交道时,我都觉得我的头要爆炸了。
-
再想一想,似乎还有一个问题:e.g. EST 的 2020-3-7 将有凌晨 2 点,而 2020-3-8 由于过渡到 EDT 而没有。因此,在 UTC/naive 中添加 1 天将起作用,但本地化将失败。
-
是的,日期时间足够聪明,可以处理这些问题,我希望有一种方法可以让时间增量同样聪明,这样我就不必考虑这个问题了。
标签: python pandas datetime timezone