now - python unix timestamp to datetime




Konvertieren der Unix-Timestamp-Zeichenfolge in ein lesbares Datum (10)

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:

  1. 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'
    
  2. 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'
    

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

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:

  1. Konvertiere den Unix-Zeitstempel ("Sekunden seit Epoche") in die lokale Zeit
  2. 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




strftime