Подтвердить что ты не робот

Как преобразовать объект datetime Python в UTC?

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

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

from datetime import datetime, timedelta

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

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

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

4b9b3361

Ответ 1

from datetime import datetime, timedelta
datetime.utcnow() + timedelta(minutes=5)

Ответ 3

Для тех, кто оказался здесь, ищет способ конвертировать объект datetime в UTC секунд с эпохи UNIX:

import time
import datetime

t = datetime.datetime.now()
utc_seconds = time.mktime(t.timetuple())

Ответ 4

Вы можете использовать метод 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

Ответ 5

Я нашел способ взять текущее время, добавить к нему объект 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 меньше одного дня. Если вы хотите что-то, что работает с каким-либо значением timedelta, вы можете использовать timedelta.total_seconds() (для Python 2.7 и более поздних) или с помощью 86400*timedelta.days + timedelta.seconds. Я на самом деле не пробовал это, поэтому я не уверен на 100%, если он будет работать.

Ответ 6

Для преобразования в UTC из строки даты:

from time import mktime
from datetime import datetime

mktime(datetime.utctimetuple(datetime.strptime("20110830_1117","%Y%m%d_%H%M")))

Ответ 7

решение с фантастическим Delorean lib:

>>> import datetime
>>> import delorean
>>> dt = datetime.datetime.now()
>>> dl = delorean.Delorean(dt, timezone='US/Pacific')
>>> dl.shift('UTC')
Delorean(datetime=2015-03-27 03:12:42.674591+00:00, timezone=UTC)

>>> dl.shift('UTC').datetime
datetime.datetime(2015, 3, 27, 3, 12, 42, 674591, tzinfo=<UTC>)

>>> dl.shift('EST').datetime
datetime.datetime(2015, 3, 26, 22, 12, 42, 674591, tzinfo=<StaticTzInfo 'EST'>)

позволяет легко сменять дату и время между различными часовыми поясами

Ответ 8

Здесь находится решение stdlib (без сторонних модулей), которое работает как на Python 2, так и на 3.

Чтобы получить текущее время UTC в формате RFC 2822:

>>> from email.utils import formatdate
>>> formatdate(usegmt=True)
'Fri, 27 Mar 2015 08:29:20 GMT'

Чтобы получить время UTC через 5 минут в будущем:

#!/usr/bin/env python
import time
from email.utils import formatdate

print(formatdate(time.time() + 300, usegmt=True)) # 5 minutes into the future
# -> Fri, 27 Mar 2015 08:34:20 GMT