Np.interp некорректно работает с метками времени при переходе на летнее время в Америке - PullRequest
0 голосов
/ 30 августа 2018

Это время из Квинсленда, Австралия, где летнее время не наблюдается.

У меня есть программа, которая интерполирует время с использованием этой стратегии , но она интерполирует по отношению к летнему времени.

Например, этот скрипт интерполирует между двумя временными точками с общим количеством 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 голосов
/ 30 августа 2018

То, что вы видите, это переход на летнее время в США начало работы. В 2 часа ночи 5 ноября 2017 года фактически снова стало 1 час ночи.

Если вы не хотите иметь дело с US DST, я рекомендую использовать pytz, чтобы явно указать свой часовой пояс. Это также может помочь проверить, какой часовой пояс установлен на вашем компьютере, так как datetime извлекает из него свое местоположение и данные DST. Вы можете установить его с помощью

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

Я думаю. Не хочу слишком много играть с моей системой

...