Seite 1 von 1

Ausgabeformat von os.stat ?

Verfasst: Sonntag 7. Mai 2006, 14:42
von snakeseven
Hi,
ich verstehe das Zeitstempelformat nicht, das os.stat liefert. Für die Datei mit dem Datum 07-05-2006 06:53 liefert os.stat[8] '1146977625'. Mache ich mit os.utime(path,(0,1146977625))
den Umkehrtest, dann ist das auch tatsächlich das Dateidatum. Nur kann ich keinen Zusammenhang zwischen der Zahlenreihe "1146977625" und dem Zeitstempel '07-05-2006 06:53' erkennen ?

Gruss, Seven

Verfasst: Sonntag 7. Mai 2006, 14:49
von murph
Das sind die Sekunden, die seit dem 1.1.1970 vergangen sind!

Re: Ausgabeformat von os.stat ?

Verfasst: Sonntag 7. Mai 2006, 15:00
von gerold
snakeseven hat geschrieben:Nur kann ich keinen Zusammenhang zwischen der Zahlenreihe "1146977625" und dem Zeitstempel '07-05-2006 06:53' erkennen?
Hi Seven!

Du musst dir das Modul "time" ansehen. Dort sind die Funktionen zum Umwandeln von Zeitwerten drinnen.

Code: Alles auswählen

time.ctime(os.path.getctime(r"Pfad zur Datei"))
lg
Gerold
:-)

Verfasst: Sonntag 7. Mai 2006, 15:03
von snakeseven
murph hat geschrieben:Das sind die Sekunden, die seit dem 1.1.1970 vergangen sind!
Tatsächlich. Gebe ich os.utime (path, (0,1)) ein, bekomme ich als Datum 01-1-1970 01:00. Ich will die Uhrzeit von Files ändern. Das wird ja ein munteres Sekundenzählen :lol:

Gruss, Seven

Re: Ausgabeformat von os.stat ?

Verfasst: Sonntag 7. Mai 2006, 18:04
von snakeseven
gerold hat geschrieben:Du musst dir das Modul "time" ansehen. Dort sind die Funktionen zum Umwandeln von Zeitwerten drinnen.

Code: Alles auswählen

time.ctime(os.path.getctime(r"Pfad zur Datei"))
Das lese ich gerne und ist genau was ich suchte :P
Gruss, Seven

Verfasst: Sonntag 7. Mai 2006, 20:21
von snakeseven
So lässt sich der Zeitstempel einer Datei manipulieren:

Code: Alles auswählen

import os,time,calendar

fd = time.localtime(os.stat(pfad)[8])            
# Uhrzeit im Zeitstempel der Datei in "pfad"

timestring = (fd[0],monat,tag,stunde-2,minute,fd[5],fd[6],fd[7],fd[8]) 
# 9-stelliger Tupel als Argument für calendar.timegm()
# monat,tag,stunde,minute = Integer
# stunde - 2 kompensiert 2 Stunden Differenz von localtime und gmtime

timestamp = calendar.timegm(timestring)   
# wandelt Tupel in Sekunden-Gesamtzeit

os.utime(pfad,(0,timestamp))   
# stetzt Zeitstempel der Datei neu
Gruss, Seven

Verfasst: Sonntag 7. Mai 2006, 23:02
von snakeseven
Hier war was, hat sich aber erledigt.
Seven

Verfasst: Montag 8. Mai 2006, 00:32
von BlackJack
snakeseven hat geschrieben:

Code: Alles auswählen

timestring = (fd[0],monat,tag,stunde-2,minute,fd[5],fd[6],fd[7],fd[8]) 
# 9-stelliger Tupel als Argument für calendar.timegm()
# monat,tag,stunde,minute = Integer
# stunde - 2 kompensiert 2 Stunden Differenz von localtime und gmtime
Das ist recht fehleranfällig. Was ist wenn die alte Dateizeit Nachts um 1 war? Vielleicht auch noch an einem 1.3. in einem Schaltjahr oder zu Neujahr. Ich würde zum rechnen mit Datumsangaben lieber die `datetime` Objekte benutzen.

Code: Alles auswählen

import os
import time
from datetime import datetime, timedelta
delta = timedelta(hours=2)
file_time = datetime.fromtimestamp(os.path.getctime('test.py'))
new_timestamp = time.mktime((file_time - delta).timetuple())
os.utime('test.py', (new_timestamp, new_timestamp))

Verfasst: Montag 8. Mai 2006, 11:29
von snakeseven
BlackJack hat geschrieben:Das ist recht fehleranfällig. Was ist wenn die alte Dateizeit Nachts um 1 war? Vielleicht auch noch an einem 1.3. in einem Schaltjahr oder zu Neujahr. Ich würde zum rechnen mit Datumsangaben lieber die `datetime` Objekte benutzen.
Siehste, das habe ich nicht bedacht :oops:. Werde gleich mal updaten.
Thanx, Seven

Verfasst: Dienstag 9. Mai 2006, 09:07
von snakeseven
BlackJack hat geschrieben:Ich würde zum rechnen mit Datumsangaben lieber die `datetime` Objekte benutzen.
Das habe ich versucht, aber wie bringe ich den Monat unter, timedelta kennt keinen Parameter month ?

http://docs.python.org/lib/datetime-timedelta.html

Gruss,, Seven

Verfasst: Dienstag 9. Mai 2006, 13:43
von Buell
der Fehler mit den -2 Stunden lässt sich natürlich leicht beheben, indem man die 2 Stunden erst nach dem umwandeln in Sekunden abzieht, also Minus 60x60x2 Sekunden....

Code: Alles auswählen

import os,time,calendar

fd = time.localtime(os.stat(pfad)[8])           
# Uhrzeit im Zeitstempel der Datei in "pfad"

timestring = (fd[0],monat,tag,stunde,minute,fd[5],fd[6],fd[7],fd[8])
# 9-stelliger Tupel als Argument für calendar.timegm()
# monat,tag,stunde,minute = Integer

timestamp = calendar.timegm(timestring)   
# wandelt Tupel in Sekunden-Gesamtzeit

timestamp -= 60*60*2
# stunde - 2 kompensiert 2 Stunden Differenz von localtime und gmtime

os.utime(pfad,(0,timestamp))   
# stetzt Zeitstempel der Datei neu

Verfasst: Mittwoch 10. Mai 2006, 21:40
von BlackJack
snakeseven hat geschrieben:
BlackJack hat geschrieben:Ich würde zum rechnen mit Datumsangaben lieber die `datetime` Objekte benutzen.
Das habe ich versucht, aber wie bringe ich den Monat unter, timedelta kennt keinen Parameter month ?
Natürlich nicht. Was ist denn ein Monat? Oder anders gefragt 31.12. minus ein Monat -- welcher Tag soll das sein?