Conversion de la chaîne de timestamp 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. Quand j'utilise time.strftime , j'obtiens 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
606
demandé sur martineau 2010-09-10 10:56:58

15 réponses

utiliser 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'))
896
répondu Michał Niklas 2018-08-14 18:21:23
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

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

183
répondu Daniel 2010-09-10 06:59:57

la réponse la plus votée suggère d'utiliser fromtimestamp qui est sujet aux erreurs puisqu'il utilise le fuseau horaire local. Pour éviter les problèmes une meilleure approche est D'utiliser UTC:

datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')

où posix_time est le temps Posix epoch que vous voulez convertir""

127
répondu rkachach 2016-07-13 07:43:17
>>> 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'
67
répondu John La Rooy 2010-09-10 08:28:06

il y a deux parties:

  1. convertissez le timestamp unix ("secondes depuis l'époque") en heure locale
  2. afficher l'heure locale dans le format désiré.

une façon portable d'obtenir l'heure locale qui fonctionne même si le fuseau horaire local a eu un décalage utc différent dans le passé et que python n'a pas accès à la base de données tz est d'utiliser un pytz timezone:

#!/usr/bin/env python
from datetime import datetime
import tzlocal  # $ pip install tzlocal

unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)

pour l'afficher, vous pouvez utiliser n'importe quel format temporel pris en charge par votre système, par exemple:

print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y"))  # print date in your format

si vous n'avez pas besoin d'une heure locale, pour obtenir une heure UTC lisible à la place:

utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))

si vous ne vous souciez pas des problèmes de fuseau horaire qui pourraient affecter quelle date est retournée ou si python a accès à la base de données tz sur votre système:

local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))

sur Python 3, vous pouvez obtenir un datetime conscient du fuseau horaire en utilisant seulement stdlib (le décalage UTC peut être erroné si python n'a pas accès à la base de données tz sur votre système par exemple, sur Windows):

#!/usr/bin/env python3
from datetime import datetime, timezone

utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc)
local_time = utc_time.astimezone()
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
Les fonctions

du module time sont des enveloppements minces autour de L'API C correspondante et peuvent donc être moins portables que les méthodes datetime correspondantes sinon vous pourriez les utiliser aussi:

#!/usr/bin/env python
import time

unix_timestamp  = int("1284101485")
utc_time = time.gmtime(unix_timestamp)
local_time = time.localtime(unix_timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time)) 
print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))  
44
répondu jfs 2017-01-13 11:54:50

pour une estampille de temps lisible par un humain à partir D'une estampille de temps UNIX, Je l'ai utilisé dans les scripts avant:

import os, datetime

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

sortie:

'26 décembre 2012'

32
répondu Jared Burrows 2015-02-06 15:02:00

vous pouvez convertir l'heure actuelle comme ceci

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

pour convertir une date en 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
22
répondu Nick 2013-03-08 11:36:46

autrement que par heure/date heure package pandas peut également être utilisé pour résoudre le même problème.Voici comment nous pouvons utiliser pandas pour convertir timestamp en date lisible :

Timestamps peuvent être dans deux formats:

  1. 13 chiffres (millisecondes)) - Pour convertir millisecondes à ce jour, utiliser:

    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
    
  2. 10 chiffres (secondes)) - Pour convertir secondes à ce jour, utilisez:

    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)
    
    Output: '2017-04-30 05:31:01'
    
11
répondu shubham 2018-03-07 13:14:32
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp
3
répondu itsaruns 2014-02-05 13:29:07
timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')

obtenir la date lisible de timestamp avec le temps aussi, vous pouvez changer le format de la date.

2
répondu Rishabh Jhalani 2018-09-18 22:04:08

je viens d'utiliser avec succès:

>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date
1
répondu nimmy 2015-01-16 00:44:17

rapide et sale un liner:

'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))

'2013-5-5-1-9-43'

0
répondu eqzx 2013-05-05 05:10:00

vous pouvez utiliser easy_date pour le rendre facile:

import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")
-1
répondu Raphael Amoedo 2015-05-15 06:21:59

il y a une façon intéressante où vous n'avez pas à vous soucier des fuseaux horaires, utc, etc. Il suffit de convertir la chaîne dans le format de date Excel, puis à une date/heure lisible:

import datetime

def xldate_to_datetime(xldate):
    temp = datetime.datetime(1899, 12, 30)
    delta = datetime.timedelta(days=xldate)
    return temp+delta

ts = "1284101485"
tsxl = ((int(ts)/60)/60)/24 + 25569
readabledate =  xldate_to_datetime(tsxl)
print(readabledate)
-2
répondu Gursel Karacor 2018-04-27 23:10:56

avez-vous regardé le paquet datetime? Je crois qu'il a une méthode fromUnixTimestamp.

-12
répondu extraneon 2010-09-10 06:58:42