1141 votes

Conversion d'une chaîne d'horodatage unix en date lisible

J'ai une chaîne représentant un timestamp unix (i.e. "1284101485") en Python, et j'aimerais la convertir en une date lisible. Lorsque j'utilise time.strftime Je reçois un TypeError :

>>>import time
>>>print time.strftime("%B %d %Y", "1284101485")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument must be 9-item sequence, not str

5 votes

Lien vers la question pour la reconversion aussi : stackoverflow.com/q/19801727/3273031

1592voto

Michał Niklas Points 15907

Utilisez datetime module :

from datetime import datetime
ts = int('1284101485')

# if you encounter a "year is out of range" error the timestamp
# may be in milliseconds, try `ts /= 1000` in that case
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))

164 votes

.fromtimestamp() pourrait échouer pour des dates passées si un fuseau horaire local avait un décalage utc différent. Vous avez besoin d'une base de données historique des fuseaux horaires telle que fournie par pytz (ou votre système d'exploitation). Ou bien travaillez simplement en UTC et utilisez .utcfromtimestamp() .

11 votes

@J.F.Sebastian Vous avez mentionné que cela pourrait échouer dans quelques commentaires - pourriez-vous préciser pourquoi cela échouerait pour des dates/heures passées ? (A en juger par les votes positifs, de nombreuses personnes sont d'accord avec vous et considèrent que c'est simple) N'importe quel timestamp unix a une date/heure équivalente simple ?

4 votes

@davidhood2 prendre un système où python n'a pas accès à la base de données tz (Windows), définissez votre fuseau horaire local sur un fuseau horaire qui avait un décalage UTC différent dans le passé (par exemple Europe/Moscou), appelez fromtimestamp() avec des horodatages du passé (2011-). Comparez les résultats avec les valeurs calculées en utilisant pytz . Si ce n'est pas clair, posez une question distincte sur Stack Overflow.

333voto

Daniel Points 936
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

Tiré de http://seehuhn.de/pages/pdate

92voto

gnibbler Points 103484
>>> import time
>>> time.ctime(int("1284101485"))
'Fri Sep 10 16:51:25 2010'
>>> time.strftime("%D %H:%M", time.localtime(int("1284101485")))
'09/10/10 16:51'

12 votes

time.ctime() y time.localtime() peut échouer pour des dates passées si le fuseau horaire local a un décalage utc différent. Vous avez besoin d'une base de données historique des fuseaux horaires telle que fournie par pytz (ou votre système d'exploitation). Ou bien travaillez simplement en UTC et utilisez time.gmtime() . datetime pourrait fournir une plage de dates plus large, de sorte que datetime.utcfromtimestamp() pourrait être utilisé à la place de time fonctions.

0 votes

@John La Rooy existe-t-il une méthode similaire pour reconvertir une chaîne de date-heure en timestamp Unix ?

38voto

Jared Burrows Points 3932

Pour un horodatage lisible par l'homme à partir d'un horodatage UNIX, j'ai déjà utilisé ceci dans scripts :

import os, datetime

datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")

Sortie :

26 décembre 2012

29voto

Nick Points 687

Vous pouvez convertir l'heure actuelle comme suit

t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'

Pour convertir une date dans une chaîne de caractères en différents formats.

import datetime,time

def createDateObject(str_date,strFormat="%Y-%m-%d"):    
    timeStamp = time.mktime(time.strptime(str_date,strFormat))
    return datetime.datetime.fromtimestamp(timeStamp)

def FormatDate(objectDate,strFormat="%Y-%m-%d"):
    return objectDate.strftime(strFormat)

Usage
=====
o=createDateObject('2013-03-03')
print FormatDate(o,'%d-%m-%Y')

Output 03-03-2013

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X