it-swarm.com.de

Konvertieren von Unix-Timestamp-Zeichenfolgen in lesbare Datumsangaben

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
734
VeryNewToPython

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'))
1095
Michał Niklas
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

Entnommen aus http://seehuhn.de/pages/pdate

219
Daniel

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

140
rkachach
>>> 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'
71
John La Rooy

Es gibt zwei Teile:

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

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))  
57
jfs

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

34
Jared Burrows

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
24
Nick

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:

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

14
Rishabh Jhalani

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

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

ich habe gerade erfolgreich verwendet:

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

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")
0
Raphael Amoedo

schnell und dreckig ein liner:

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

"2013-5-5-1-9-43"

0
eqzx