У меня есть следующая функция (с преувеличенными инструкциями регистратора, чтобы помочь с отладкой прямо сейчас), которая берет входной часовой пояс и дату и время и преобразует их в PST:
def convert_to_pst_equivalent_time(input_datetime, input_timezone):
timezone = pytz.timezone(input_timezone)
dt_date = input_datetime.split("T")[0]
dt_time = input_datetime.split("T")[1].split("-")[0] if "-" in input_datetime.split("T")[1] else \
input_datetime.split("T")[1].split("+")[0]
dt = datetime.strptime((dt_date + " " + dt_time), "%Y-%m-%d %H:%M:%S")
logger.info("DT is: {}".format(dt))
dt = timezone.localize(dt)
logger.info("DT is now: {}".format(dt))
dt = dt.astimezone(pytz.timezone("America/Los_Angeles"))
logger.info("DT is finally: {}".format(dt))
return dt.strftime("%Y-%m-%dT%H:%M:%S")
Если у нас есть некоторые входные данные, такие как «2020-02-03T00: 00: 00» как «input_datetime» и «Pacific / Norwalk» как input_timezone, мои выводы следующие:
DT is: 2020-02-03 00:00:00
DT is now: 2020-02-03 00:00:00+12:00
DT is finally: 2020-02-02 04:00:00-08:00
Однако, основываясь на этом веб-сайте ( https://www.zeitverschiebung.net/en/difference/timezone/pacific--norfolk/city/5368361), Pacific / Norwalk должен быть +11: 00, а не +12: 00, и поэтому мой окончательный вывод после преобразования в время Лос-Анджелеса также отключен на 1 час. Странно, это работает для других часовых поясов, но этот, в частности, предлагает проблемы. Я пытался сделать что-то вроде замены tzinfo = и localize () (, как видно выше ), но ни один из них не возвращает правильное смещение. Есть идеи?