2016-09-06 21 views
12

什麼是從stat()呼叫調用datetime對象的修改時間轉換成最習慣/有效的方式?我想出了以下(python3):從stat()。st_mtime到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) 

似乎一輪迴合,並有點出人意料,我有硬編碼在那裏Unix紀元。有更直接的方法嗎?

回答

20

嘗試 datetime.fromtimestamp(statResult.st_mtime)

例如

import datetime 

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

要清楚的是,'datetime' _class_上的替代構造函數('classmethod'),不是'datetime' _module_的函數。所以如果你只在文件頂部有'import datetime',你需要'datetime.datetime.fromtimestamp(...)'。另外,考慮到OP使用'pathlib',而不是'os.path',它應該是'Path()。stat()。st_mtime';他們甚至從來沒有導入'os',所以從'os.path'使用'path.getmtime'在OP的上下文中可能會有點混亂。 – ShadowRanger

+1

我已將其更正爲顯示使用導入日期時間兩次的日期時間。 – CashCow