Python 如何跨DST边界在固定时间获得周期性时间序列?
Python能够使用()函数提供规则间隔的时间间隔:Python 如何跨DST边界在固定时间获得周期性时间序列?,python,pandas,timezone,Python,Pandas,Timezone,Python能够使用()函数提供规则间隔的时间间隔: >>> import pandas as pd >>> import pytz, datetime >>> from pprint import pprint as pp >>> tzto = pytz.timezone("America/Toronto") >>> oct17 = tzto.localize(datetime.datetime(2014
>>> import pandas as pd
>>> import pytz, datetime
>>> from pprint import pprint as pp
>>> tzto = pytz.timezone("America/Toronto")
>>> oct17 = tzto.localize(datetime.datetime(2014, 10, 17, 8))
>>> #get every Friday from Oct 17 (a Friday) for 5 weeks...
>>> pp(pd.date_range(oct17, periods=5, freq="W-FRI").tolist())
[Timestamp('2014-10-17 08:00:00-0400', tz='America/Toronto'),
Timestamp('2014-10-24 08:00:00-0400', tz='America/Toronto'),
Timestamp('2014-10-31 08:00:00-0400', tz='America/Toronto'),
Timestamp('2014-11-07 07:00:00-0500', tz='America/Toronto'),
Timestamp('2014-11-14 07:00:00-0500', tz='America/Toronto')]
不幸的是,当间隔跨越DST更改时,初始时间丢失。如上所示,由于2014年11月2日多伦多的DST变更计划,上述最后两个条目已移回上午7点
如何构造序列以保持DST边界上的时间相同?ie:在上面的示例中,上面的每个条目都应该是上午8点,而不是在DST跳转后切换到上午7点。要这样做,开始日期时间必须是原始的。将时区本地化在之后,通过将
tz
关键字参数传递到date\u range()
生成序列:
以上所有时间都是上午8点,即使是11月2日DST跳转
>>> import pandas as pd
>>> import pytz, datetime
>>> from pprint import pprint as pp
>>> tzto = pytz.timezone("America/Toronto")
>>> oct17_naive = datetime.datetime(2014, 10, 17, 8, 0, 0)
>>> pp(pd.date_range(oct17_naive, periods=5, freq="W-FRI", tz=tzto).tolist())
[Timestamp('2014-10-17 08:00:00-0400', tz='America/Toronto'),
Timestamp('2014-10-24 08:00:00-0400', tz='America/Toronto'),
Timestamp('2014-10-31 08:00:00-0400', tz='America/Toronto'),
Timestamp('2014-11-07 08:00:00-0500', tz='America/Toronto'),
Timestamp('2014-11-14 08:00:00-0500', tz='America/Toronto')]