Возможно ли, и если да, то как получить часовой пояс (например, UTC offset или datetime.timezone
экземпляр с этим смещением), который используется datetime.datetime.fromtimestamp()
для преобразования POSIX timestamp (секунды с эпохи) до объекта datetime
?Получить часовой пояс, используемый datetime.datetime.fromtimestamp()
datetime.datetime.fromtimestamp()
преобразует временную метку POSIX к наивным datetime
объекта (т.е. без tzinfo
), но делает это с помощью языковой системы, чтобы приспособить ее к локальной временной зоне UTC и смещение, которое было в силе в то время.
Например, используя дату 2008-12-27 полночь UTC (40 * 356 * 86400 секунд с начала эпохи):
>>> datetime.datetime.fromtimestamp(40 * 356 * 86400)
datetime.datetime(2008, 12, 27, 1, 0)
, что отметка времени преобразуется в datetime
объекта на 1 час в утром (которое было в то время здесь, в часовом поясе CET/CEST). 100 дней спустя, это результат:
>>> datetime.datetime.fromtimestamp((40 * 356 + 100) * 86400)
datetime.datetime(2009, 4, 6, 2, 0)
Что такое 2 часа утра. Это потому, что к тому времени DST был активным.
Я ожидал, что datetime.datetime.fromtimestamp()
установит tzinfo
, который он использует в возвращаемом экземпляре datetime
, но это не так.
Это на самом деле то, что мне понадобилось бы назад, когда я задал вопрос. Знание правил часового пояса не имеет значения, достаточно только смещения UTC для того, что я делаю. – Feuermurmel