Ich habe eine Zeichenfolge, die einen Unix-Zeitstempel (d. H. "1284101485") in Python darstellt, und möchte sie in ein lesbares Datum konvertieren. Wenn ich time.strftime
verwende, erhalte ich ein 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
Verwenden Sie das datetime
Modul:
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'))
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)
Entnommen aus http://seehuhn.de/pages/pdate
Die am häufigsten gewählte Antwort schlägt vor, fromtimestamp zu verwenden. Dies ist fehleranfällig, da die lokale Zeitzone verwendet wird. Um Probleme zu vermeiden, ist es besser, UTC zu verwenden:
datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')
Dabei ist posix_time 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'
Es gibt zwei Teile:
Eine tragbare Methode, um die Ortszeit zu ermitteln, die auch dann funktioniert, wenn die lokale Zeitzone in der Vergangenheit einen anderen UTC-Offset 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)
Zum Anzeigen können Sie jedes Zeitformat verwenden, das von Ihrem System unterstützt wird, z.
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, gehen Sie stattdessen wie folgt vor, um 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 für die Zeitzonenprobleme interessieren, die Auswirkungen haben könnten welches Datum wird zurückgegeben? oder wenn 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 zeitzonenbezogene Datumszeit nur mit stdlib erhalten (der UTC-Offset kann falsch sein, wenn python keinen Zugriff auf die tz-Datenbank auf Ihrem System hat, z. B. 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 time
-Modul sind Thin Wrapper um die entsprechende C-API und daher möglicherweise weniger portabel als die entsprechenden datetime
-Methoden. Andernfalls können 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 von Menschen lesbaren Zeitstempel von einem UNIX-Zeitstempel habe ich dies in Skripten zuvor verwendet:
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 so umrechnen
t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'
So konvertieren Sie ein Datum in einer Zeichenfolge in ein anderes Format.
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
Anders als mit time/datetime package kann pandas auch zur Lösung desselben Problems verwendet werden. So können wir pandas zum Konvertieren verwenden - Zeitstempel bis lesbares Datum:
Zeitstempel können in zwei Formaten vorliegen:
13 Stellen (Millisekunden) - Um Millisekunden in Datum umzuwandeln, verwenden Sie:
import pandas
result_ms=pandas.to_datetime('1493530261000',unit='ms')
str(result_ms)
Output: '2017-04-30 05:31:01'
10 Stellen (Sekunden) - Um Sekunden in Datum umzuwandeln, verwenden Sie:
import pandas
result_s=pandas.to_datetime('1493530261',unit='s')
str(result_s)
Output: '2017-04-30 05:31:01'
timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')
Holen Sie sich das lesbare Datum aus dem Zeitstempel mit der Uhrzeit mit, außerdem können Sie das Format des Datums ändern.
Eine andere Möglichkeit, dies zu tun, ist die Verwendung der Funktion gmtime und format.
from time import gmtime
print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))
Ausgabe: 2018-10-4 11:57:44
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp
ich habe gerade erfolgreich verwendet:
>>> 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")
schnell und dreckig ein liner:
'-'.join(str(x) for x in list(Tuple(datetime.datetime.now().timetuple())[:6]))
"2013-5-5-1-9-43"