Python: как преобразовать временную метку времени в UTC, не зная, действует ли DST
Я пытаюсь преобразовать наивную временную метку, которая всегда находится в тихоокеанском времени до времени UTC. В приведенном ниже коде я могу указать, что эта временная метка у меня есть в тихоокеанском времени, но она, похоже, не знает, что это должно быть смещение -7 часов с UTC, потому что только 10/21 и DST еще не закончился.
script:
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, пока DST не закончится 3 ноября. Как я могу получить свою дату, связанную с часовым поясом, для правильного смещения, когда DST и не действует? Является ли 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)