2009-05-10 8 views
6

J'ai un horodatage en millisecondes à partir de 1970. Je voudrais le convertir en date lisible par un humain en python. Je ne perdrais peut-être pas de précision si cela devait arriver.Conversion d'un java System.currentTimeMillis() à ce jour en python

Comment dois-je faire cela?

Donnent ValueError: horodatage hors de portée pour la plate-forme time_t sur Linux 32 bits

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

Merci, Maxim.

Répondre

16

Python attend quelques secondes, donc diviser par 1000,0 premier:

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

Peut vouloir diviser par 1000.0 pour forcer le flottement dans les anciennes versions de Python. –

+0

En effet, édité en tant que tel. Merci. – ismail

1

Il est divisé en millisecondes l'horodatage par 1000 pour devenir en secondes.

date.fromtimestamp(1241711346274/1000) 
3

Vous pouvez conserver la précision, car en Python l'horodatage est un flotteur. Voici un exemple:

import datetime 

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

dans le REPL, vous pouvez évidemment plus compact que cela, mais ce qui précède est adapté pour la saisie, une ligne à la fois, voir ce qu'il fait. Par exemple:

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