2009-05-10 5 views
6

Ho il timestamp in millisecondi del 1970. Vorrei convertirlo in una data leggibile in python. Non potrei perdere un po 'di precisione se si tratta di questo.Conversione di un java System.currentTimeMillis() alla data in python

Come devo fare?

Il seguente dare ValueError: timestamp fuori portata per la piattaforma time_t su Linux a 32 bit

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

Grazie, Maxim.

risposta

16

pitone aspetta secondi, quindi dividerlo per 1000.0 prima:

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

Potrebbe voler dividere per 1000,0 per forzare il punto mobile nelle versioni precedenti di Python. –

+0

Infatti, modificato come tale. Grazie. – ismail

1

In millisecondi è stato diviso il timestamp per 1000 in secondi.

date.fromtimestamp(1241711346274/1000) 
3

È possibile mantenere la precisione, perché in Python il timestamp è un galleggiante. Ecco un esempio:

import datetime 

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

È possibile, ovviamente, rendere più compatto di quello, ma quanto sopra è adatto per la tipizzazione, una linea alla volta, nel REPL, in modo da vedere che cosa fa. Ad esempio:

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