Преобразование в метку времени UTC
//parses some string into that format.
datetime1 = datetime.strptime(somestring, "%Y-%m-%dT%H:%M:%S")
//gets the seconds from the above date.
timestamp1 = time.mktime(datetime1.timetuple())
//adds milliseconds to the above seconds.
timeInMillis = int(timestamp1) * 1000
Как мне (в любой момент этого кода) включить дату в формат UTC? Я вспахал API за то, что кажется столетием, и не могу найти ничего, что я могу получить. Может ли кто-нибудь помочь? В настоящее время я превращаю его в восточное время, я верю (однако я нахожусь в GMT, но хочу UTC).
EDIT: Я дал ответ парню, который ближе всего к тому, что я наконец узнал.
datetime1 = datetime.strptime(somestring, someformat)
timeInSeconds = calendar.timegm(datetime1.utctimetuple())
timeInMillis = timeInSeconds * 1000
:)
Ответы
Ответ 1
def getDateAndTime(seconds=None):
"""
Converts seconds since the Epoch to a time tuple expressing UTC.
When 'seconds' is not passed in, convert the current time instead.
:Parameters:
- `seconds`: time in seconds from the epoch.
:Return:
Time in UTC format.
"""
return time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(seconds))`
Это преобразует локальное время в UTC
time.mktime(time.localtime(calendar.timegm(utc_time)))
http://feihonghsu.blogspot.com/2008/02/converting-from-local-time-to-utc.html
Если преобразование struct_time в seconds-then-the-epoch выполняется с использованием mktime, это
конверсия находится в локальном часовом поясе. Там нет способа сказать ему использовать какой-либо конкретный часовой пояс, даже не UTC. Стандартный пакет "время" всегда предполагает, что время находится в вашем локальном часовом поясе.
Ответ 2
datetime.utcfromtimestamp
- это, вероятно, то, что вы ищете:
>>> timestamp1 = time.mktime(datetime.now().timetuple())
>>> timestamp1
1256049553.0
>>> datetime.utcfromtimestamp(timestamp1)
datetime.datetime(2009, 10, 20, 14, 39, 13)
Ответ 3
Я думаю, вы можете использовать метод utcoffset()
:
utc_time = datetime1 - datetime1.utcoffset()
Документы приводят пример этого, используя метод astimezone()
здесь.
Кроме того, если вы собираетесь иметь дело с часовыми поясами, вы можете посмотреть в библиотеку PyTZ, в которой есть много полезного инструменты для преобразования даты и времени в различные временные интервалы (в том числе между EST и UTC)
С PyTZ:
from datetime import datetime
import pytz
utc = pytz.utc
eastern = pytz.timezone('US/Eastern')
# Using datetime1 from the question
datetime1 = datetime.strptime(somestring, "%Y-%m-%dT%H:%M:%S")
# First, tell Python what timezone that string was in (you said Eastern)
eastern_time = eastern.localize(datetime1)
# Then convert it from Eastern to UTC
utc_time = eastern_time.astimezone(utc)
Ответ 4
Вероятно, вам нужно одно из двух:
import time
import datetime
from email.Utils import formatdate
rightnow = time.time()
utc = datetime.datetime.utcfromtimestamp(rightnow)
print utc
print formatdate(rightnow)
Два выхода выглядят следующим образом
2009-10-20 14:46:52.725000
Tue, 20 Oct 2009 14:46:52 -0000