Ich versuche ein Paar Funktionen zu schreiben, dt
und ut
, die zwischen normaler Unixzeit (Sekunden seit 1970-01-01 00:00:00 UTC) und ein Python-Datetime-Objekt.Konvertiere ein unixtime in ein datetime Objekt und wieder zurück (Paar Zeitumwandlungsfunktionen, die inversen sind)
Wenn dt
und ut
richtige Umkehrungen waren dann würde dieser Code den gleichen Zeitstempel zweimal drucken:
import time, datetime
# Convert a unix time u to a datetime object d, and vice versa
def dt(u): return datetime.datetime.fromtimestamp(u)
def ut(d): return time.mktime(d.timetuple())
u = 1004260000
print u, "-->", ut(dt(u))
Ach, der zweite Zeitstempel beträgt 3600 Sekunden (eine Stunde) kleiner als der erste. Ich denke, das passiert nur für ganz bestimmte unixtimes, vielleicht während dieser Stunde, die Sommerzeit überspringt. Aber gibt es eine Möglichkeit, dt
und ut
zu schreiben, so dass sie wahre Inverse voneinander sind?
Verwandte Frage: Making matplotlib's date2num and num2date perfect inverses
btw, wenn die Funktion nichts tut, sondern ruft eine andere Funktion mit die gleichen Argumente können Sie dann einfach zuweisen: 'dt = datetime.datetime.utcfromtimestamp'. Funktionen sind erstklassige Bürger in Python: Sie können sie als Parameter an andere Funktionen übergeben, von Funktionen zurückkehren, etc. – jfs
Ah, schön, toller Punkt! Ist es effizienter oder nur eine Frage der Prägnanz? Was ist mit 'def f (x): Rückkehr foo (x)' vs 'f = Lambda x: foo (x)'? (Meine Erinnerung ist, dass diese sowohl funktional als auch in Bezug auf die Effizienz äquivalent sind.) – dreeves
"f = g" bedeutet, dass f, g zwei Namen sind, die sich auf die gleiche Funktion beziehen. 'def' und' lambda' erzeugen neue Funktionen. – jfs