0

Python Datetime: Использование strftime() с учетом временной зоны

22

Я столкнулся с проблемой при работе с объектом даты и времени в 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 ответ(ов)

0

Вот как можно конвертировать ваше местное время в 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, вы можете посетить официальный сайт.

0

Судя по вашему вопросу, вы столкнулись с проблемой импорта модуля 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.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь