Np.interp 在美国夏令时转换期间无法正确处理时间戳
Np.interp doesn't work correctly on timestamps during American daylight savings transitions
这些时间来自澳大利亚昆士兰,那里没有夏令时。
我有一个使用 插值时间的程序,但它根据夏令时进行插值。
例如,此脚本在两个时间点之间插值,总共有 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
忽略美国夏令时并像没有夏令时开关一样插入时间?
您看到的是 US daylight savings time 开始。2017 年 11 月 5 日凌晨 2 点,实际上 又变成了凌晨 1 点。
如果您不想处理美国夏令时,我建议您使用 pytz
明确设置您的时区。它也可能有助于检查您的计算机设置的时区,因为 datetime
从中提取它的位置和 DST 数据。你可以用
设置
os.environ['TZ'] = 'Australia/Brisbane'
我觉得。不想过多地摆弄我的系统
这些时间来自澳大利亚昆士兰,那里没有夏令时。
我有一个使用
例如,此脚本在两个时间点之间插值,总共有 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
忽略美国夏令时并像没有夏令时开关一样插入时间?
您看到的是 US daylight savings time 开始。2017 年 11 月 5 日凌晨 2 点,实际上 又变成了凌晨 1 点。
如果您不想处理美国夏令时,我建议您使用 pytz
明确设置您的时区。它也可能有助于检查您的计算机设置的时区,因为 datetime
从中提取它的位置和 DST 数据。你可以用
os.environ['TZ'] = 'Australia/Brisbane'
我觉得。不想过多地摆弄我的系统