Преобразование java System.currentTimeMillis () в дату в Python - PullRequest
7 голосов
/ 10 мая 2009

У меня есть метка времени в миллисекундах с 1970 года. Я хотел бы преобразовать ее в удобочитаемую дату в python. Я не могу потерять некоторую точность, если дело доходит до этого.

Как мне это сделать?

Следующее дает ValueError: временная метка вне диапазона для платформы time_t в Linux 32bit

#!/usr/bin/env python
from datetime import date
print date.fromtimestamp(1241711346274)

Спасибо, Максим.

Ответы [ 3 ]

17 голосов
/ 10 мая 2009

Python ожидает секунды, поэтому сначала разделите его на 1000.0:

>>> print date.fromtimestamp(1241711346274/1000.0)
2009-05-07
3 голосов
/ 10 мая 2009

Вы можете сохранить точность, потому что в Python метка времени является плавающей точкой. Вот пример:

import datetime

java_timestamp = 1241959948938
seconds = java_timestamp / 1000
sub_seconds  = (java_timestamp % 1000.0) / 1000.0
date = datetime.datetime.fromtimestamp(seconds + sub_seconds)

Очевидно, что вы можете сделать его более компактным, но вышеприведенное подходит для ввода строки за раз в REPL, поэтому посмотрите, что она делает. Например:

Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> java_timestamp = 1241959948938
>>> import datetime
>>> seconds = java_timestamp / 1000
>>> seconds
1241959948L
>>> sub_seconds  = (java_timestamp % 1000.0) / 1000.0
>>> sub_seconds
0.93799999999999994
>>> date = datetime.datetime.fromtimestamp(seconds + sub_seconds)
>>> date
datetime.datetime(2009, 5, 10, 8, 52, 28, 938000)
>>> 
1 голос
/ 10 мая 2009

Это в миллисекундах, деленное отметка времени на 1000, чтобы стать в секундах.

date.fromtimestamp(1241711346274/1000)
...