now - python unix timestamp to datetime
Konvertieren der Unix-Timestamp-Zeichenfolge in ein lesbares Datum (10)
Ich habe eine Zeichenfolge, die einen Unix-Zeitstempel (zB "1284101485") in Python darstellt, und ich möchte ihn in ein lesbares Datum umwandeln. 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
Anders als die Verwendung von time / datetime- Paket, Pandas können auch verwendet werden, um das gleiche Problem zu lösen.Hier ist, wie wir Pandas verwenden können , Zeitstempel in lesbare Datum zu konvertieren:
Zeitstempel können in zwei Formaten vorliegen:
13 Ziffern (Millisekunden) - Um Millisekunden in Datum zu konvertieren, verwenden Sie:
import pandas result_ms=pandas.to_datetime('1493530261000',unit='ms') str(result_ms) Output: '2017-04-30 05:31:01'
10 Ziffern (Sekunden) - Um Sekunden in Datum zu konvertieren, verwenden Sie:
import pandas result_s=pandas.to_datetime('1493530261',unit='s') str(result_s) Output: '2017-04-30 05:31:01'
Die am häufigsten gewählte Antwort schlägt vor, den Zeitstempel zu verwenden, der fehleranfällig ist, da er die lokale Zeitzone verwendet. Um Probleme zu vermeiden, sollten Sie UTC verwenden:
datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')
Wo posix_time ist die Posix-Epoche, die Sie konvertieren möchten
Es gibt zwei Teile:
- Konvertiere den Unix-Zeitstempel ("Sekunden seit Epoche") in die lokale Zeit
- Zeigen Sie die lokale Zeit 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 jedes beliebige 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, um stattdessen eine lesbare UTC-Zeit zu erhalten:
utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))
Wenn Sie sich nicht um die Zeitzonenprobleme kümmern, die sich darauf auswirken könnten, welches Datum zurückgegeben wird 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"))
In Python 3 konnten Sie nur mit stdlib ein timezone-aware datetime ermitteln (der UTC-Offset ist möglicherweise falsch, 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 können sie weniger portabel sein als die entsprechenden datetime
Methoden, sonst 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))
Für einen für Menschen lesbaren Zeitstempel aus einem UNIX-Zeitstempel habe ich dies in Skripts zuvor verwendet:
import os, datetime
datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")
Ausgabe:
'26. Dezember 2012'
Sie können easy_date , um es einfach zu machen:
import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")
Sie können die aktuelle Zeit so 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
ich habe gerade erfolgreich gebraucht:
>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date
schnell und schmutzig ein Liner:
'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))
"2013-5-5-1-9-43"
>>> 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'
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp