Я хотел бы написать небольшую функцию, которая может рассчитывать количество часов в любой день для любого часового пояса. Очевидный подход заключался в подсчете часов между первым моментом дня и следующим днем. К сожалению, какой бы день я ни выбрал, при таком подходе всегда говорится, что день длится 24 часа.

В Великобритании часы продвинулся в 1:00 марта на 1 час. Это означает, что 28 марта 2021 года должно быть 23 часа. Временного диапазона с часу ночи до двух часов ночи в тот день не существовало.

Аналогичным образом, 31 октября 2021 года часы переводятся на 1 час ночи, так что в этом дне будет 25 часов. Временной интервал от полуночи до часу ночи будет происходить дважды в этот день.

import datetime
import pytz

# When do the clocks change?
# https://www.gov.uk/when-do-the-clocks-change

day0=datetime.datetime(2021,3,28, tzinfo=pytz.timezone("Europe/London"))
day1=datetime.datetime(2021,3,29, tzinfo=pytz.timezone("Europe/London"))

delta = day1-day0

print(delta)
hours = delta / datetime.timedelta(hours=1)
print(hours)

Этот сценарий дает вывод, который кажется неправильным:

1 day, 0:00:00
24.0 

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

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

3
Salim Fadhley 20 Май 2021 в 20:32

1 ответ

Лучший ответ