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

Преобразовать временную метку с эпохи в datetime.datetime

У меня есть следующие временные метки с эпохи:

Timestamp
1346114717972
1354087827000

Как я могу преобразовать эти временные метки в какой-то определенный выходной формат, например, mm/dd/yyyy hr:min:sec?

Я попытался преобразовать их в datetime.datetime, но это не удалось:

 >>> datetime.datetime.fromtimestamp(1346114717972)
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 ValueError: timestamp out of range for platform time_t

Как я могу это сделать?

4b9b3361

Ответ 1

Я бы использовал модуль time

>>> import time
>>> time.gmtime(1346114717972/1000.)
time.struct_time(tm_year=2012, tm_mon=8, tm_mday=28, tm_hour=0, tm_min=45, tm_sec=17, tm_wday=1, tm_yday=241, tm_isdst=0)

метка времени делится на 1000, поскольку отмеченные вами штампы находятся в миллисекундах, поскольку эпоха, а не секунды

затем используйте strftime для форматирования так

>>> time.strftime('%m/%d/%Y %H:%M:%S',  time.gmtime(1346114717972/1000.))
'08/28/2012 00:45:17'

Ответ 2

Я предполагаю, что это миллисекундное разрешение:

import datetime

s = '1346114717972'
t = datetime.datetime.fromtimestamp(float(s)/1000.)

fmt = "%Y-%m-%d %H:%M:%S"
print t.strftime(fmt)
# prints 2012-08-28 02:45:17

Адаптация строки формата к этому конкретному случаю остается в качестве упражнения для читателя. Посмотрите документацию для поведения strftime() и strptime().