Проверьте, находится ли datetime.datetime в летнее время с помощью функции.dst(), не возвращающей значение в часовом поясе pytz

Я пытаюсь проверить, находится ли произвольно локализованный объект даты и времени в летнее время или нет.

Это аналогичный вопрос, который многие уже задавали. например. ( Летнее время в Python)

В этих платах способ проверить, находится ли datetime в DST, состоит в использовании встроенной функции.dst(). Это обернуто в bool как:

if bool(mydatetimeobject.dst()):
    print ("date is DST!")

Однако всякий раз, когда я делаю aribtrary datetime и передаю tztimezone, функция.dst () ничего не сообщает. Как будто часовой пояс не был установлен!

Проверьте этот фрагмент кода, чтобы увидеть проблему:

>>> from datetime import datetime
>>> import pytz
>>> localtime = pytz.timezone('US/Central')

>>> mydate = datetime(2004,3,1)  # day in standard time
>>> localtime.localize(mydate)
datetime.datetime(2004, 3, 1, 0, 0, tzinfo=<DstTzInfo 'US/Central' CST-1 day, 18:00:00 STD>)
>>> mydate.dst()

>>> mydate = datetime(2004,5,1)  #day in daylight time
>>> localtime.localize(mydate)
datetime.datetime(2004, 5, 1, 0, 0, tzinfo=<DstTzInfo 'US/Central' CDT-1 day, 19:00:00 DST>)
>>> mydate.dst()
>>> bool(mydate.dst())
False

1 ответ

Решение

Это работает, но вам нужно назначить localtime.localize() приведите к переменной и сравните это. Теперь вы просто отображаете вывод и проверяете.dst() оригинальной, наивной даты и времени.

a = localtime.localize(mydate)
bool(a.dst())

возвращает True (при условии, что mydate находится в DST).

Другие вопросы по тегам