2009-05-10 2 views
6

У меня есть метка времени в миллисекундах с 1970 года. Я хотел бы преобразовать ее в человеко-читаемую дату на python. Я не могу потерять некоторую точность, если дело дойдет до этого.Преобразование java System.currentTimeMillis() на сегодняшний день в python

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

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

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

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

ответ

16

Python ожидает секунд, поэтому разделить его на 1000,0 первый:

>>> print date.fromtimestamp(1241711346274/1000.0) 
2009-05-07 
+2

Может хотеть разделить на 1000,0, чтобы заставить плавающие точки в более старых версиях Python. –

+0

Действительно, отредактирован как таковой. Благодарю. – ismail

1

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

date.fromtimestamp(1241711346274/1000) 
3

Вы можете сохранить точность, потому что в 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) 
>>> 
Смежные вопросы