2016-07-15 6 views
1

Ich erstelle einen Zeitstempel mit datetime.date.today(). Tag. Später im Code soll dieser mit einem anderen (aktuellen) Zeitstempel verglichen werden, aber nur auf der Tages-Ebene: "Wenn der aktuelle Tag nicht der Tag des früheren Zeitstempels ist, mach was".Werden Datetime-Zeitstempel nach dem Beizen aktualisiert?

Um dies zu tun, speichere ich den ersten Zeitstempel mit Pickle. Jetzt frage ich mich, ob das Datetime-Objekt nach pickle.load automatisch aktualisiert wird, wenn das Ladedatum nicht das "Dumping" -Datum ist. Schließlich heißt die Funktion "heute" ... Ich hoffe, dies ist keine blöde Frage und ich habe es geschafft, mein Problem richtig zu erklären.

+0

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. –

+0

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

+0

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

Antwort

3

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.

2

Es Aktualisierung erfolgt automatisch nicht nach dem Laden. Um zu demonstrieren, sie, lesen Sie in dieses kleine Beispiel:

import pickle 
import datetime 

today1 = datetime.datetime.today() 
pickle.dump(today1, open('today','wb')) 

sleep(5) 
today2 = pickle.load(open('today','r')) 

# today1 => datetime.datetime(2016, 7, 15, 18, 6, 6, 578041) 
# today2 => datetime.datetime(2016, 7, 15, 18, 6, 6, 578041) 

Sie, dass auch nach einer Verzögerung von 5 Sekunden sehen kann, gibt es keine Änderung in Attributen (Jahr, Monat, Tag, Stunde, sec .. etc) für Datum und Uhrzeit Objekte: today1 und today2

Hoffe, es hilft:)

Verwandte Themen