У меня есть фрагмент кода, который предоставил две Python datetime
(s) с поддержкой часовых поясов, чтобы выяснить, являются ли они точно началом и концом одного и того же дня.
В большинстве случаев проверка того, что разница (timedelta
) между двумя датами составляет 23 hours, 59 minutes, 59 seconds and 999999 microseconds
, работает нормально:
from datetime import datetime, time, timedelta, date
import pytz
ny = pytz.timezone('America/New_York')
day=date(2019, 3, 11)
start_naive=datetime.combine(day, time.min)
start=ny.localize(start_naive)
end_naive=datetime.combine(day, time.max)
end=ny.localize(end_naive)
same_day_check = timedelta(hours=time.max.hour,
minutes=time.max.minute,
seconds=time.max.second,
microseconds=time.max.microsecond)
print(f"Same day?")
(end - start) == same_day_check # This outputs True
⚠️ Однако .. .
В дни перехода на летнее время день не длится 23 часа 59 минут. 59 se c. и 999999 микросекунд, но +1 час или -1 час (в эти даты "день" может длиться 22 часа, 59 минут .. или 24 часа, 59 минут ...):
# ...
day=date(2019, 3, 10) # DST start in NY timezone
# ...
same_day_check = timedelta(hours=time.max.hour,
minutes=time.max.minute,
seconds=time.max.second,
microseconds=time.max.microsecond)
print(f"Same day?")
(end - start) == same_day_check # Now this is `False`
print(end-start) # This outputs 22:59:59.999999
Is Есть ли более надежный способ, чем этот? Использование timedelta
, как описано выше, явно не является надежным решением.