Как преобразовать целочисленную метку времени в дату и время Python

У меня есть файл данных, содержащий отметки времени, такие как "1331856000000". К сожалению, у меня нет большого количества документации для формата, поэтому я не знаю, как отформатирована метка времени. Я пробовал стандарты Python datetime.fromordinal() и datetime.fromtimestamp() и несколько других, но ничего не найдено. Я уверен, что конкретное число соответствует текущей дате (например, 2012-3-16), но не намного больше.

Как мне преобразовать это число в datetime?

Ответ 1

datetime.datetime.fromtimestamp() является правильным, за исключением того, что вы, вероятно, имеете временную метку в миллисекундах (например, в JavaScript), но fromtimestamp() ожидает отметку времени Unix, в секундах.

Сделайте это так:

>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)

и результат:

>>> date
datetime.datetime(2012, 3, 16, 1, 0)

Отвечает ли ваш вопрос на ваш вопрос?

EDIT: Дж. Ф. Себастьян правильно предложил использовать истинное деление на 1e3 (float 1000). Разница значительна, если вы хотите получить точные результаты, поэтому я изменил свой ответ. Разница возникает из-за поведения по умолчанию Python 2.x, которое всегда возвращает int при делении (используя оператор /) int на int (это называется разделение полов). Заменяя делитель 1000 (являющийся int) делителем 1e3 (представляющим 1000 как float) или с float(1000) (или 1000. и т.д.), Деление становится истинным делением. Python 2.x возвращает float при делении int на float, float на int, float на float и т.д. И когда есть некоторая дробная часть в метке времени, переданной в fromtimestamp() метод, этот результат метода также содержит информацию об этой дробной части (в виде числа микросекунд).