Я пытаюсь сравнить многие осведомленные объекты даты и времени. Я нашел 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?