Python `fromtimestamp` выполняет дискретный переход

Я использую 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совершает скачок.

7
задан Community 23 May 2017 в 12:20
поделиться