首页 > 解决方案 > 在美国夏令时转换期间,Np.interp 在时间戳上无法正常工作

问题描述

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

我有一个使用这种策略插入时间的程序,但它会根据夏令时进行插值。

例如,此脚本在两个时间点之间进行插值,总共有 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忽略美国夏令时而只是插入时间,就好像没有夏令时开关一样?

标签: pythonnumpydatetimetimestampinterpolation

解决方案


您看到的是美国夏令时开始。2017 年 11 月 5 日凌晨 2 点,实际上又变成了凌晨 1 点。

如果您不想处理美国 DST,我建议您使用pytz明确设置您的时区。它也可能有助于检查您的计算机设置的时区,因为datetime从中得出它的位置和 DST 数据。你可以设置它

os.environ['TZ'] = 'Australia/Brisbane'

我认为。不想过多地玩弄我的系统


推荐阅读