Поведение Python datetime и timedelta при изменении летнего времениPython

Программы на Python
Ответить
Anonymous
 Поведение Python datetime и timedelta при изменении летнего времени

Сообщение Anonymous »

Я столкнулся с таким поведением и решил спросить, как правильно это сделать.
Вот игрушечный пример:

Код: Выделить всё

pre_timechange = datetime.datetime(2025, 11, 2, 1, 59, 9, tzinfo=zoneinfo.ZoneInfo(key='America/Toronto'))
pre_timechange_epoch = pre_timechange.timestamp() # Equal to 1762063149.0

post_timechange = pre_timechange + timedelta(minutes=15)
# post_timechange is now datetime.datetime(2025, 11, 2, 2, 14, 9, tzinfo=zoneinfo.ZoneInfo(key='America/Toronto'))
post_timechange_epoch = post_timechange.timestamp() # Equal to 1762067649.0
В этом часовом поясе, как только время достигнет 2 часов ночи, мы должны вернуться к 1 часам ночи из-за летнего времени. Но если мы посмотрим на временную метку в эпохе, то будет добавлено 1,25 часа (75 минут вместо 15 минут, которые были явно установлены). Я ожидал, что timedelta на самом деле будет дельтой с течением времени, и ожидал, что 15 минут будут увеличиваться независимо от часового пояса. Такое поведение кажется довольно нелогичным, поскольку я думал, что временные дельты должны быть просто разницей во времени.
Как правильно добавить 15 минут правильно на Python, сохраняя при этом часовой пояс?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ime-change
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»