2016-09-06 86 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