Как я могу получить объекты BST datetime? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь сравнить многие осведомленные объекты даты и времени. Я нашел pytz, но не нашел часовой пояс BST или как создать собственные часовые пояса, чтобы у меня было UTC + 1 в британское летнее время. В любом случае, я нашел обходной путь, который работает, но я уверен, что есть другой, лучший способ, поэтому я поделюсь им ниже.

На основе timeanddate.com для Лондона, который меня интересует:

Воскресенье, 31 марта 2019 года, 01:00:00 часы были переведены на 1 час вперед Воскресенье, 31 марта 2019 года, 02:00:00 по местному летнему времени.

Таким образом, tz_1 и tz_2 должны быть в формате UTC, тогда как tz_3 должна быть в формате BST.

import datetime
import pytz

tz_1 = pytz.timezone('Europe/London').localize(datetime.datetime(2019, 3, 30, 9, 15)).tzinfo
tz_2 = pytz.timezone('Europe/London').localize(datetime.datetime(2019, 3, 31, 9, 15)).tzinfo
tz_3 = pytz.timezone('Europe/London').localize(datetime.datetime(2019, 4, 1, 9, 15)).tzinfo

date1 = datetime.datetime(2019 , 4, 25, tzinfo = tz_1)
date2 = datetime.datetime(2019 , 4, 25, tzinfo = tz_2)
date3 = datetime.datetime(2019 , 4, 25, tzinfo = tz_3)

utc_date = datetime.datetime(2019, 4, 25, tzinfo = pytz.UTC)

print ("Date 1:   ", date1, date1.tzinfo) # Timezone returns Europe/London
print ("Date 2:   ", date1, date2.tzinfo) # Timezone returns Europe/London
print ("Date 3:   ", date1, date3.tzinfo) # Timezone returns Europe/London
print ("UTC date: ", utc_date, utc_date.tzinfo) # Timezone returns UTC

print (date1 > date2) # returns True
print (date2 > date3) # returns False
print (date3 > date1) # returns False

Сравнения верны, но визуализация не так хороша, поскольку все они возвращают "Европа / Лондон" в качестве часового пояса. Поэтому мне трудно понять, находится ли объект datetime в BST по лондонскому времени или по UTC по лондонскому.

Также вы заметите, что я устанавливаю часовой пояс на дату 2019-04-25. Часовой пояс должен был быть BST, но я также заставляю его использовать часовой пояс UTC. Я собираюсь форсировать часовые пояса для объектов во время моего сценария, так как я читаю их из .csvs, и они читаются как строки, а не как объекты даты и времени.

Итак, мой последний вопрос, как я могу иметь объекты datetime с BST?

1 Ответ

0 голосов
/ 30 апреля 2019

Чтобы проверить, находится ли дата и время в BST (британское летнее время), проверьте функцию dst() (корректировка летнего времени) вашего объекта часового пояса:

print('Is Summer time?')
print(date1, tz_1.dst(date1) != datetime.timedelta(0))
print(date2, tz_2.dst(date2) != datetime.timedelta(0))
print(date3, tz_3.dst(date3) != datetime.timedelta(0))
...