Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何跨DST边界在固定时间获得周期性时间序列?_Python_Pandas_Timezone - Fatal编程技术网

Python 如何跨DST边界在固定时间获得周期性时间序列?

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

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, 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')]