Я использую datetime.fromtimestamp
для преобразования времени эпохи в местное время . Я обнаружил, что datetime.fromtimestamp
делает дискретный скачок на один час в определенный момент времени, и я совершенно сбит с толку, почему это происходит.
(Я также использую time.mktime
для преобразования объекта datetime во время эпохи, как предложил Рэймонд Хеттингер. Я не уверен, что это актуальная информация для этого вопрос, поэтому я говорю это на всякий случай.)
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time, datetime
>>> def datetime_to_epoch_time(datetime_):
... return time.mktime(datetime_.timetuple()) + datetime_.microsecond / 1e6
...
Выбор определенного времени эпохи:
>>> x = datetime_to_epoch_time(datetime.datetime(2012, 3, 30, 3, 0))
Преобразование его в дату и время с помощью fromtimestamp
:
>>> datetime.datetime.fromtimestamp(x)
datetime.datetime(2012, 3, 30, 3, 0)
Мы получаем время 3 часа ночи.
Теперь давайте конвертируем время ровно за одну секунду до него:
>>> datetime.datetime.fromtimestamp(x-1)
datetime.datetime(2012, 3, 30, 1, 59, 59)
Мы внезапно получаем 1:59!
Что случилось? Я знаю, что подобные вещи случаются в високосные дни, но с каких это пор 30 марта стал високосным днем?
Должен отметить, что такое случалось со мной только в Linux, а не в Windows. И я думаю, что разные Linux-компьютеры (в разных часовых поясах) имеют разную временную точку, в которой fromtimestamp
совершает скачок.