2009-05-10 21 views
6

1970'den beri milisaniye cinsinden zaman damgası var. Bunu python'da okunabilir bir tarihe dönüştürmek istiyorum. Buna gelirse, kesin olarak kaybetmem.Python'da bir java System.currentTimeMillis() tarihine dönüştürme

Bunu nasıl yapmalıyım?

aşağıdaki ValueError vermek: zaman damgası aralık dışında

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

, Maxim teşekkür ederiz Linux 32bit üzerinde time_t platformu için.

cevap

16

Python saniye bekler, bu nedenle ilk 1000.0 bölerek:

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

Python eski sürümlerinde kayan nokta zorlamak için 1000.0 tarafından bölmek isteyebilirsiniz. –

+0

Gerçekten, bu şekilde düzenlenmiştir. Teşekkürler. – ismail

1

Bu, milisaniye cinsinden, zaman damgasını 1000 saniyeye bölünmesiyle bölünür.

date.fromtimestamp(1241711346274/1000) 
3

Sen hassas koruyabilir, Python damgası bir şamandıra çünkü.

import datetime 

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

Açıkçası bundan daha daha kompakt yapabilirsiniz, ancak yukarıda, bir REPL bir defada çizgi, bu yüzden ne yaptığını görmek yazarak için uygundur: İşte bir örnek. Örneğin:

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) 
>>> 
İlgili konular