Unix-Timestamp-String in Python in ein lesbares Datum umwandeln


Ich habe eine Zeichenfolge, die einen Unix-Zeitstempel (dh "1284101485") in Python darstellt, und ich möchte sie in ein lesbares Datum konvertieren. Wenn ich time.strftime verwende, time.strftime ich einen 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



Answers


Verwenden Sie das datetime Modul:

import datetime
print(
    datetime.datetime.fromtimestamp(
        int("1284101485")
    ).strftime('%Y-%m-%d %H:%M:%S')
)

In diesem Code kann datetime.datetime seltsam aussehen, aber 1st datetime ist der datetime und 2nd ist der Klassenname. Also datetime.datetime.fromtimestamp() ist fromtimestamp() Methode der datetime Klasse vom datetime Modul.




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

Aufgenommen von http://seehuhn.de/pages/pdate




Die am häufigsten gestellte Antwort schlägt die Verwendung von fromtimestamp vor, das fehleranfällig ist, da es die lokale Zeitzone verwendet. Um Probleme zu vermeiden, ist es besser, UTC zu verwenden:

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

Wo posix_time ist die Posix-Epochenzeit, die Sie konvertieren möchten




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



Für einen vom Menschen lesbaren Zeitstempel von einem UNIX-Zeitstempel habe ich dies in Skripten vor:

import os, datetime

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

Ausgabe:

"26. Dezember 2012"




Sie können die aktuelle Uhrzeit wie folgt konvertieren

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

So konvertieren Sie ein Datum in einer Zeichenfolge in verschiedene Formate.

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



Es gibt zwei Teile:

  1. Konvertiere den Unix-Zeitstempel ("Sekunden seit Epoche") in die Ortszeit
  2. Zeigt die Ortszeit im gewünschten Format an.

Ein portabler Weg, um die lokale Zeit zu erhalten, die funktioniert, auch wenn die lokale Zeitzone einen anderen utc-Offset in der Vergangenheit hatte und python keinen Zugriff auf die tz-Datenbank hat, ist die Verwendung einer pytz Zeitzone:

#!/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)

Um es anzuzeigen, können Sie ein beliebiges Zeitformat verwenden, das von Ihrem System unterstützt wird, zB:

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

Wenn Sie keine Ortszeit benötigen, erhalten Sie stattdessen eine lesbare UTC-Zeit:

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

Wenn Sie sich nicht für die Zeitzonenprobleme interessieren, die sich auf das Datum auswirken könnten oder ob python Zugriff auf die tz-Datenbank auf Ihrem System hat:

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

Auf Python 3 könnten Sie eine Zeitzone-bewusste datetime nur mit stdlib erhalten (der UTC-Offset könnte falsch sein, wenn Python keinen Zugriff auf die tz-Datenbank auf Ihrem System hat, zB unter 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)"))

Funktionen aus dem Zeitmodul sind dünne Wrapper um die entsprechende C-API und daher möglicherweise weniger portabel als die entsprechenden datetime Methoden, ansonsten könnten Sie sie auch verwenden:

#!/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))  



import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp



schnell und schmutzig ein liner:

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

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




Ich habe gerade erfolgreich eingesetzt:

>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date



Sie können easy_date verwenden , um es einfach zu machen:

import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")



Haben Sie sich das datetime-Paket angesehen? Ich glaube, es hat eine fromUnixTimestamp-Methode.