Python: как преобразовать временную метку с учетом часового пояса в UTC, не зная, действует ли DST
Я пытаюсь преобразовать наивную временную метку, которая всегда в тихоокеанском времени, в время UTC. В приведенном ниже коде я могу указать, что у меня есть метка времени по тихоокеанскому времени, но, похоже, она не знает, что она должна быть смещена на -7 часов от UTC, потому что она только 10/21, а летнее время имеет еще не закончился.
Сценарий:
import pytz
import datetime
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S")
localtz = pytz.timezone('America/Los_Angeles')
date_aware_la = naive_date.replace(tzinfo=localtz)
print date_aware_la
Выходы:
2013-10-21 08:44:08-08:00
Он должен иметь смещение -07:00, пока не закончится летнее время 3 ноября. Как я могу получить дату с указанием часового пояса, чтобы иметь правильное смещение, когда летнее время действует и не действует? Достаточно ли умен pytz, чтобы знать, что DST вступит в силу 3 ноября?
Общая цель: я просто пытаюсь преобразовать метку времени в UTC, зная, что я получу метку времени в Тихом океане без указания того, действует ли DST. Я не генерирую эту дату из самого Python, поэтому я не могу просто использовать utc_now().
1 ответ
Использовать localize
метод:
import pytz
import datetime
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S")
localtz = pytz.timezone('America/Los_Angeles')
date_aware_la = localtz.localize(naive_date)
print(date_aware_la) # 2013-10-21 08:44:08-07:00
Это описано в разделе "Пример и использование" документации pytz.
А потом продолжаем UTC:
utc_date = date_aware_la.astimezone(pytz.utc)
print(utc_date)