Python Datetime: Использование strftime() с учетом временной зоны
Я столкнулся с проблемой при работе с объектом даты и времени в Python, который является "осведомленным о часовом поясе". У меня есть дата d
, представленная следующим образом:
>>> d
datetime(2009, 4, 19, 21, 12, tzinfo=tzoffset(None, -7200))
Как видно, объект даты имеет смещение в 2 часа. Время в UTC представляется так:
>>> d.utctimetuple()
time.struct_time(tm_year=2009, tm_mon=4, tm_mday=19,
tm_hour=23, tm_min=12, tm_sec=0,
tm_wday=6, tm_yday=109, tm_isdst=0)
Таким образом, правильная дата в UTC - 19 апреля 2009 года, 23:12:00, верно?
Теперь мне необходимо отформатировать эту дату в строку, и я использую следующий код:
>>> d.strftime('%Y-%m-%d %H:%M:%S.%f')
'2009-04-19 21:12:00.000000'
Однако полученный результат, похоже, не учитывает смещение. Как мне это исправить?
2 ответ(ов)
Вот как можно конвертировать ваше местное время в UTC и вывести его:
import datetime
import pytz
from dateutil.tz import tzoffset
# Создаем объект времени с местным смещением
loc = datetime.datetime(2009, 4, 19, 21, 12, tzinfo=tzoffset(None, -7200))
# Конвертируем в UTC и выводим в нужном формате
print(loc.astimezone(pytz.utc).strftime('%Y-%m-%d %H:%M:%S.%f'))
В этом коде мы используем библиотеку pytz
для работы с временными зонами. Сначала мы создаем объект datetime
с заданным местным временем и смещением -7200 секунд (что соответствует UTC-2). Затем с помощью метода astimezone()
мы преобразуем это время в UTC. Выводим результат в формате YYYY-MM-DD HH:MM:SS
с миллисекундами.
Для более подробной информации о библиотеке pytz
, вы можете посетить официальный сайт.
Судя по вашему вопросу, вы столкнулись с проблемой импорта модуля timezone
. Вы нашли временное решение, установив переменную окружения TZ
, что действительно может переопределить информацию из файла /etc/localtime
.
Вот небольшой пример, который демонстрирует, как это работает:
>>> import os
>>> import datetime
>>> print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M'))
2019-05-17 11:26
>>> os.environ["TZ"] = "UTC"
>>> print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M'))
2019-05-17 09:26
В этом примере вы сначала выводите текущее время в вашей локальной зоне. Затем устанавливаете значение переменной окружения TZ
на UTC
. Когда вы снова выводите текущее время, оно изменяется, так как теперь datetime использует установленную зону UTC вместо вашей локальной.
Если вам нужно более надежное решение для работы с часовыми поясами, рекомендую использовать библиотеку pytz
, которая предоставляет удобный способ работы с временными зонами в Python.
Как преобразовать datetime в date?
Как конвертировать секунды в часы, минуты и секунды?
Как рассчитать количество дней между двумя заданными датами
Как вывести дату в стандартном формате?
Преобразование строки даты JSON в datetime в Python