2009-05-10 21 views
6

Tengo timestamp en milisegundos desde 1970. Me gustaría convertirlo a una fecha legible para humanos en python. No podría perder algo de precisión si se trata de eso.Convirtiendo un java System.currentTimeMillis() hasta la fecha en python

¿Cómo debo hacer eso?

La siguiente dar ValueError: marca de tiempo fuera de rango para la plataforma time_t de 32 bits Linux

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

Gracias, Maxim.

Respuesta

16

Python espera segundos, por lo que se divide por primera 1000.0:

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

Podría dividir por 1000.0 para forzar el punto flotante en las versiones anteriores de Python. –

+0

De hecho, editado como tal. Gracias. – ismail

1

En milisegundos dividió la marca de tiempo entre 1000 para convertirse en segundos.

date.fromtimestamp(1241711346274/1000) 
3

Puede conservar la precisión, ya que en Python la marca de tiempo es un flotador. He aquí un ejemplo:

import datetime 

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

Puede obviamente hacerlo más compacto que eso, pero lo anterior es adecuado para escribir, una línea a la vez, en el REPL, por lo que ver lo que hace. Por ejemplo:

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