Как я могу преобразовать объект даты и времени Python в UTC?

У меня есть объект даты и времени Python, который я хотел бы преобразовать в UTC. Я планирую произвести его в формате RFC 2822, чтобы вставить HTTP-заголовок, но я не уверен, имеет ли это значение для этого вопроса. Я нашел некоторую информацию об этом сайте о преобразовании объектов времени, и это выглядит более простым тот путь, но на этот раз я действительно хочу использовать объекты даты и времени, потому что я использую timedeltas для корректировки их:

Я попробовал что-то вроде этого:

from datetime import datetime, timedelta

now = datetime.now()
fiveMinutesLater = datetime.now() + timedelta(minutes=5)
fiveMinutesLaterUtc = ???

Ничто во время или модуль даты и времени не похоже, он помог бы мне. Кажется, что я могу делать это путем передачи объекта даты и времени через 3 или 4 функции, но я задаюсь вопросом, существует ли более простой путь.

Я предпочел бы не использовать сторонние модули, но я могу, если это - единственный разумный выбор.

42
задан Elias Zamaria 25 July 2010 в 04:09
поделиться

3 ответа

Сначала вам нужно чтобы убедиться, что datetime учитывает часовой пояс, установив его член tzinfo :

http://docs.python.org/library/datetime.html#datetime.tzinfo

Вы можете затем используйте функцию .astimezone () , чтобы преобразовать его:

http://docs.python.org/library/datetime.html#datetime.datetime.astimezone

9
ответ дан 26 November 2019 в 23:54
поделиться

Вы можете использовать метод formatdate в модуле email.Utils, как показано ниже

>>> from email.Utils import formatdate
>>> print formatdate()
Sun, 25 Jul 2010 04:02:52 -0000

Это дата и время в формате RFC 2822. По умолчанию он возвращает время в формате UTC, но если вам нужно местное время, вы можете вызвать formatdate (localtime = True).

Для получения дополнительной информации проверьте http://docs.python.org/library/email.mime.html#module-email.util

2
ответ дан 26 November 2019 в 23:54
поделиться

Я нашел способ взять текущее время, добавить к нему объект timedelta, преобразовать результат в UTC и вывести его в RFC 2822:

time.strftime("%a, %d-%b-%Y %H:%M:%S GMT",
    time.gmtime(time.time() + datetime.timedelta(minutes=5).seconds))

Это не совсем отвечает на мой вопрос, но я помещаю это здесь, потому что это может помочь кому-то еще в моей ситуации.

EDIT: Я хотел бы добавить, что этот трюк работает, только если временная дельта меньше одного дня. Если вам нужно что-то, что работает с любым значением временной дельты, вы можете использовать timedelta.total_seconds() (для Python 2.7 и выше) или 86400*timedelta.days + timedelta.seconds. На самом деле я еще не пробовал, поэтому не уверен на 100%, будет ли это работать.

2
ответ дан 26 November 2019 в 23:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: