2017-01-09 13 views
1

В 2016 году daylight savings time началось с 2am on 2016-03-13 для восточного времени США и закончилось на 2am on 2016-11-06. Таким образом, 2016-03-13 02:30:00 не является допустимой меткой времени, а 2016-11-06 01:30:00 произошло дважды.Почему не панды производят неоднозначную ошибку времени?

Я ожидал бы этот код, чтобы бросить ошибки о неоднозначных и несуществующие времена, но это не делает:

from pandas import Timestamp 

no_such_time = "2016-03-13 02:30:00" 
ambiguous_time = "2016-11-06 01:30:30" 
est = 'US/Eastern' 
utc = 'UTC' 

ts1 = Timestamp(no_such_time, tz=est).tz_convert(utc) 
ts2 = Timestamp(ambiguous_time, tz=est).tz_convert(utc) 

Почему панды считают обоих из них, чтобы быть действительными раз?

Я пользуюсь Pandas 0.14.1.

ответ

1

В этом коде:

ts1 = pd.Timestamp(no_such_time, tz=est) 
ts2 = pd.Timestamp(ambiguous_time, tz=est) 

pandas преобразует оба эти времена в часовой пояс осознает метку времени. Кажется, что это происходит без осознания потенциальных проблем (IE, это очень разрешительно). После преобразования временные метки уже хранятся внутри UTC с соответствующим часовым поясом. Поэтому последующий вызов tz_convert будет работать нормально:

ts1 = pd.Timestamp(no_such_time, tz=est).tz_convert(utc) 
ts2 = pd.Timestamp(ambiguous_time, tz=est).tz_convert(utc) 

Если вы на самом деле хотите, чтобы определить, являются ли временные метки в заблуждении, что можно сделать с помощью:

ts1 = pd.Timestamp(no_such_time).tz_localize(est) 
ts2 = pd.Timestamp(ambiguous_time).tz_localize(est) 

В этих случаях pandas повысятся a NonExistentTimeError и AmbiguousTimeError соответственно.

+0

Итак, если я правильно понимаю этот ответ, я всегда должен быть безопасным преобразованием между 'US/Eastern' и' UTC'? – Batman

+0

Спасибо за это. – Batman