os.stat().st_mtime als String speichern und vergleichen...
Verfasst: Freitag 5. September 2008, 16:40
In meinem kleinen MD5sum_calc Skript möchte ich gern das Dateidatum (os.stat().st_mtime) in eine Textdatei speichern. In einem späteren Programm lauf, soll der gespeicherte Wert mit dem aktuellen mtime verglichen werden.
Das erste Problem ist die Zeitzone: Eigentlich hätte ich gern das immer localtime angezeigt wird, weil man es die Zeiten manuell vergleichen kann (Also mit der Angabe in den Eigenschaften der Datei bzw. die Datei Explorer)
Ich hab ein wenig Probiert und mit eine tzinfo gebaut. Aber das ist alles nicht so einfach zu machen. Also speicher ich es doch in UTC und fertig. Zusätzlich könnte ich noch die Information mit speichern:
Nicht ganz klar ist, ob ich überhaupt eine Unterscheidung machen muß zwischen Sommerzeit oder nicht. Könnte ich nicht einfach immer time.altzone nehmen?
Jedenfalls kommt sowas raus:
Das nächste Problem sind die microsekunden. mtime liefert diese ja zurück.
Theoretisch kann ich beim datetime.strftime() Format String statt "%s" (Normale Sekunden) ein "%f" (Microsekunden) nehmen.
Das rückwandeln mit strptime geht aber nicht mit %f!
Ab Python 2.5 könnte man es so machen:
Vor Python 2.5 gibt kein datetime.strptime also muß man über time gehen, funktioniert natürlich auch nicht, weil %f nicht gibt:
z.Z. sehe ich also nicht, wie man die microsekunden in einen String und wieder zurück bekommt, ohne das Parsen selber übernehmen zu müßen. Übersehe ich da was?
Ein externes Zusatzmodul möchte ich nicht nehmen.
EDIT: Was mir gerade einfällt, speziell für mein kleines Skript brauche ich eigentlich keine Rückwandlung des Datetime-Strings. Ich generieren einfach nochmal den String von mtime und vergleiche die Strings.
Dennoch wäre es nett, wenn es dazu eine Lösung gibt!
Das erste Problem ist die Zeitzone: Eigentlich hätte ich gern das immer localtime angezeigt wird, weil man es die Zeiten manuell vergleichen kann (Also mit der Angabe in den Eigenschaften der Datei bzw. die Datei Explorer)
Ich hab ein wenig Probiert und mit eine tzinfo gebaut. Aber das ist alles nicht so einfach zu machen. Also speicher ich es doch in UTC und fertig. Zusätzlich könnte ich noch die Information mit speichern:
Code: Alles auswählen
if time.daylight != 0:
# Sommerzeit
offset=-time.altzone
else:
# keine Sommerzeit
offset=-time.timezone
offset_string = "%+dsec. (%s)" % (offset, time.tzname[1])
Jedenfalls kommt sowas raus:
(wobei das ä z.Z. noch Encoding Probleme bereitet, aber egal.)+7200sec. (Mitteleuropäische Sommerzeit)
Das nächste Problem sind die microsekunden. mtime liefert diese ja zurück.
Theoretisch kann ich beim datetime.strftime() Format String statt "%s" (Normale Sekunden) ein "%f" (Microsekunden) nehmen.
Das rückwandeln mit strptime geht aber nicht mit %f!
Ab Python 2.5 könnte man es so machen:
Code: Alles auswählen
datetime.datetime.strptime(datetime_string, DATETIME_FORMAT)
# geht nicht:
Traceback (most recent call last):
File "test.py", line 40, in <module>
dt3 = datetime.datetime.strptime(datetime_string, DATETIME_FORMAT)
File "C:\Python25\lib\_strptime.py", line 320, in strptime
(bad_directive, format))
ValueError: 'f' is a bad directive in format '%a, %d %b %Y %H:%M:%f'
Code: Alles auswählen
time.mktime(time.strptime(datetime_string, DATETIME_FORMAT))
# geht auch nicht
Traceback (most recent call last):
File "test.py", line 30, in <module>
timestamp = time.mktime(time.strptime(datetime_string, DATETIME_FORMAT))
File "C:\Python25\lib\_strptime.py", line 320, in strptime
(bad_directive, format))
ValueError: 'f' is a bad directive in format '%a, %d %b %Y %H:%M:%f'
Ein externes Zusatzmodul möchte ich nicht nehmen.
EDIT: Was mir gerade einfällt, speziell für mein kleines Skript brauche ich eigentlich keine Rückwandlung des Datetime-Strings. Ich generieren einfach nochmal den String von mtime und vergleiche die Strings.
Dennoch wäre es nett, wenn es dazu eine Lösung gibt!