Преобразовать временную метку с эпохи в 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
Как я могу это сделать?
Ответы
Ответ 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().