2009-05-10 4 views
6

Ich habe Zeitstempel in Millisekunden von 1970. Ich möchte es in ein menschenlesbares Datum in Python konvertieren. Ich könnte nicht die Genauigkeit verlieren, wenn es dazu kommt.Konvertieren eines Java System.currentTimeMillis() bis zum Datum in Python

Wie soll ich das tun?

Die folgenden geben Valueerror: Zeitstempel für Plattform außerhalb des zulässigen Bereichs Time_t auf Linux 32bit

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

Danke, Maxim.

Antwort

16

Python erwartet Sekunden, so teilen sie durch 1000,0 zuerst:

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

Möglicherweise möchten Sie durch 1000,0 teilen, um Gleitpunkt in älteren Versionen von Python zu erzwingen. –

+0

In der Tat, als solche bearbeitet. Vielen Dank. – ismail

1

Es ist in Millisekunden unterteilt den Zeitstempel um 1000 in Sekunden zu werden.

date.fromtimestamp(1241711346274/1000) 
3

Sie können die Genauigkeit erhalten, weil in Python der Zeitstempel ein Schwimmer ist. Hier ein Beispiel:

import datetime 

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

Sie es offenbar als kompakter machen, aber die oben ist geeignet für die Typisierung, eine Linie zu einer Zeit, in der REPL, so sehen, was es tut. Zum Beispiel:

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) 
>>>