【问题标题】:Np.interp doesn't work correctly on timestamps during American daylight savings transitions在美国夏令时转换期间,Np.interp 在时间戳上无法正常工作
【发布时间】:2019-02-04 23:24:39
【问题描述】:

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

我有一个使用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 忽略美国夏令时,只插入时间,就好像没有夏令时开关一样?

【问题讨论】:

  • 我投票结束这个问题,因为这个问题与编程无关,不太可能帮助未来的读者。请向美国国会发送错误报告:夏令时。
  • 我的版本在那一小时内添加了fold=1datetime.datetime(2017, 11, 5, 1, 2, 38, 181818, fold=1)
  • hpaulj - 你能发布你的版本吗?

标签: python numpy datetime timestamp interpolation


【解决方案1】:

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

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

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

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

【讨论】:

  • 嗨丹尼尔,感谢您指出这一点。这些时间取自澳大利亚昆士兰州,但那里根本没有夏令时。有什么方法可以纠正 python 时间包中美国夏令时的看似固有的特性吗?我已编辑问题以反映此信息。
  • 可能还想问一个问题,这个已经埋没了。首先还原您的编辑,这样一些 numbskull 不会将新问题作为此问题的副本关闭。
猜你喜欢
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2018-04-20
  • 2012-05-10
  • 1970-01-01
  • 2017-08-28
相关资源
最近更新 更多