2016-09-06 2 views
12

Was ist der idiomatische/effiziente Weg, um von einer Änderungszeit, die von stat() abgerufen wird, in ein datetime Objekt zu konvertieren? Ich kam mit dem Follow-up (python3):Von stat(). St_mtime bis datetime?

from datetime import datetime, timedelta, timezone 
from pathlib import Path 

path = Path('foo') 
path.touch() 
statResult = path.stat() 
epoch = datetime(1970, 1, 1, tzinfo=timezone.utc) 
modified = epoch + timedelta(seconds=statResult.st_mtime) 
print('modified', modified) 

Scheint um einen Kampf, und ein wenig überraschend, dass ich zu hart Code in dort die Unix-Epoche haben. Gibt es einen direkteren Weg?

Antwort

20

datetime.fromtimestamp(statResult.st_mtime)

Versuchen z.B.

import datetime 

mod_timestamp = datetime.datetime.fromtimestamp(path.getmtime(<YOUR_PATH_HERE>)) 
+5

klar sein, das ist ein alternativer Konstruktor ('classmethod') auf dem' datetime' _class_, nicht eine Funktion des 'datetime' _module_. Wenn Sie also nur 'import datetime' am Anfang der Datei haben, benötigen Sie' datetime.datetime.fromtimestamp (...) '. Wenn das OP 'pathlib', nicht' os.path' verwendet, sollte das 'Path () sein. Stat(). St_mtime'; Sie importierten niemals "os", so dass die Verwendung von "path.getmtime" aus "os.path" im OP-Kontext etwas verwirrend sein könnte. – ShadowRanger

+1

Ich habe es so korrigiert, dass datetime zweimal mit import datetime angezeigt wird. – CashCow