Die Methode datetime.datetime.today()
erstellt ein neues datetime.datetime
Objekt des aktuellen Moments. Das Objekt selbst weiß nicht, wie es erzeugt wurde, d. H. Weder die Funktion noch die Absicht der Funktion. Es weiß nur, wann es erstellt wurde, und dies wird gespeichert.
Wenn Sie in der Dokumentation der Funktion suchen (zB über help(datetime.datetime.today
), sieht es folgendermaßen aus:
Aktuelles Datum oder Datumzeit: wie self.__class__.fromtimestamp(time.time())
Jetzt bietet time.time()
den aktuellen Zeitstempel , z.B 1468585949.653488
. Dies ist eine einfache Nummer (float
oder int
), die konstant ist einmal erstellt. Diese Nummer wird dann einfach an datetime.datetime.fromtimestamp
übergeben. Für jeden gegebenen Zeitstempel erhalten Sie immer denselben datetime
[1].
In [12]: datetime.datetime.fromtimestamp(1468585949.653488)
Out[12]: datetime.datetime(2016, 7, 15, 14, 32, 29, 653487)
Wenn Sie dieses Objekt Dump, erhalten Sie ein regelmäßiges datetime.datetime
Objekt. Es ist nur die einfache Klasse datetime.datetime
und ihre Daten, keine Funktion oder Methodenreferenz wie datetime.datetime.today
.
In [3]: print(pickle.dumps(datetime.datetime.fromtimestamp(1468585949.653488),protocol=0))
# cdatetime # class datetime.\
# datetime # datetime
# p0 # push last object (datetime.datetime) to stack as p0
# (S'\x07\xe0\x07\x0f\x0e \x1d\t\xf8\xb0' # group '(' start, string 'S' from binary ('\x07...')
# p1 # push last object (string) to stack as p1
# tp2 # create tuple from last stack group, push to stack as p2
# Rp3 # call p0(*p2)
# . # done
Also, was macht dieses Stück Müll? Es sieht das Objekt datetime.datetime
als p0
, speichert die Zeichenfolge '\x07\xe0\x07\x0f\x0e \x1d\t\xf8\xb0'
als p1
, erstellt das Tupel p2 = tuple((p1,))
, ruft dann p0(*p2)
.
Oder mit anderen Worten, datetime.datetime('\x07\xe0\x07\x0f\x0e \x1d\t\xf8\xb0')
zurückgegeben wird. Beachten Sie, dass das Argument datetime.datetime
eine Konstante Zeichenfolge ist. Dadurch werden Sie immer die ursprüngliche Datumzeit geben:
In [30]: datetime.datetime('\x07\xe0\x07\x0f\x0e \x1d\t\xf8\xb0')
Out[30]: datetime.datetime(2016, 7, 15, 14, 32, 29, 653488)
[1] Baring Unterschiede in Zeitzonen usw.
Nein, Zeitstempel werden nicht autoupdated. Ich habe das Gefühl, dass Sie Fehler beim Zeitvergleich sind. . Es wäre hilfreicher, wenn Sie Details mit Code-Snippets bereitstellen können. –
Versuchen Sie 'type (datetime.date.heute(). Tag) '. Sie werden sehen, dass es ein 'int' ist. Es weiß nichts über "heute", es ist nur eine Nummer. – matiasg
Eine kleine Frage, die nichts mit dem Problem zu tun hat: Warum speichern Sie den ersten Zeitstempel mit Pickle, wenn Sie nur "Später im Code" verwenden? Stoppt Ihr Programm die Ausführung und lädt den letzten Zeitstempel beim Fortsetzen? – MisterMiyagi