2009-05-10 28 views
6

Mam znacznik czasu w milisekundach z 1970 roku. Chciałbym przekonwertować go na datę czytelną dla człowieka w python. Nie mogę stracić precyzji, jeśli o to chodzi.Konwersja java System.currentTimeMillis() do daty w pythonie

Jak mam to zrobić?

Poniższy dać ValueError: znacznik czasu poza zasięgiem dla platformy time_t na Linux 32bit

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

Dziękuję Maxim.

Odpowiedz

16

Python oczekuje sekund, więc podzielić ją przez 1000.0 pierwszy:

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

Może chcieć podzielić przez 1000.0, aby wymusić zmiennoprzecinkowe w starszych wersjach Pythona. –

+0

Rzeczywiście, edytowane jako takie. Dzięki. – ismail

1

W milisekundach dzieli znacznik czasu na 1000, by stał się w sekundach.

date.fromtimestamp(1241711346274/1000) 
3

Można zachować precyzję, ponieważ w Pythonie datownik jest pływak. Oto przykład:

import datetime 

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

Można oczywiście zrobić to bardziej kompaktowy niż to, ale powyżej nadaje się do pisania, linia na raz, w REPL, więc zobaczyć, co robi. Na przykład:

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