在美国夏令时期间,Np.interp在时间戳上无法正常工作

时间:2018-08-30 05:39:39

标签: python numpy datetime timestamp interpolation

这些时间来自澳大利亚的昆士兰州,那里没有夏令时。

我有一个使用this strategy进行时间插值的程序,但是它相对于夏时制进行插值。

例如,此脚本在两个时间点之间进行插值,总计间隔为100。

import numpy as np
from datetime import datetime
import datetime as dt
import time

x_dec = np.linspace(0, np.pi, num=100)

time1 = dt.datetime(2017, 11, 4, 20, 47, 0)
time2 = dt.datetime(2017, 11, 5, 3, 1, 0)

this_time = time.mktime(time1.timetuple())
next_time = time.mktime(time2.timetuple())

this_x_temp = np.interp(x_dec, (x_dec.min(), x_dec.max()), (this_time,     next_time))

this_x = np.vectorize(datetime.fromtimestamp)(this_x_temp)
print(this_x)

与美国夏令时一致,它不是完全生成插补时间,而是在凌晨1点左右循环两次。参见示例输出。

...
datetime.datetime(2017, 11, 5, 1, 49, 29, 90909)
datetime.datetime(2017, 11, 5, 1, 53, 52, 121212)
datetime.datetime(2017, 11, 5, 1, 58, 15, 151515)
datetime.datetime(2017, 11, 5, 1, 2, 38, 181818)
datetime.datetime(2017, 11, 5, 1, 7, 1, 212121)
datetime.datetime(2017, 11, 5, 1, 11, 24, 242424)
datetime.datetime(2017, 11, 5, 1, 15, 47, 272727)
...

鉴于我的所有观测值在一整天都是随机的时间,并且在观测值之间需要大约100个数据点的插值,因此我认为我不能为该应用程序使用时间序列。如何使np.interp忽略美国的夏令时,而只是将时间插值,就好像没有夏令时切换一样?

1 个答案:

答案 0 :(得分:1)

您看到的是US daylight savings time的加入。在2017年11月5日凌晨2点,实际上又变成了凌晨1点。

如果您不想处理美国DST,建议您使用pytz明确设置您的时区。由于datetime会从中绘制计算机的位置和DST数据,这也可能有助于检查计算机设置为哪个时区。您可以使用

进行设置
os.environ['TZ'] = 'Australia/Brisbane'

我想。不想在我的系统上玩太多