Как конвертировать целую временную метку в Python datetime - PullRequest
152 голосов
/ 17 марта 2012

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

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

1 Ответ

270 голосов
/ 17 марта 2012

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)

Это отвечает на ваш вопрос?

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

...