从 stat().st_mtime 到 datetime?
Posted
技术标签:
【中文标题】从 stat().st_mtime 到 datetime?【英文标题】:From stat().st_mtime to datetime? 【发布时间】:2017-01-14 12:22:37 【问题描述】:从stat()
调用检索到的修改时间转换为datetime
对象的最惯用/最有效的方法是什么?我想出了以下(python3):
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 纪元进行硬编码。有没有更直接的方法?
【问题讨论】:
【参考方案1】:你可以使用datetime.datetime.fromtimestamp
,即
from datetime import datetime, timezone
...
stat_result = path.stat()
modified = datetime.fromtimestamp(stat_result.st_mtime, tz=timezone.utc)
print('modified', modified)
【讨论】:
需要明确的是,这是datetime
类上的替代构造函数(classmethod
),而不是datetime
模块的函数>。因此,如果文件顶部只有import datetime
,则需要datetime.datetime.fromtimestamp(...)
。此外,鉴于 OP 使用的是pathlib
,而不是os.path
,那应该是Path(<YOUR_PATH_HERE>).stat().st_mtime
;他们甚至从未导入 os
,因此在 OP 的上下文中使用来自 os.path
的 path.getmtime
可能会有些混乱。
我已更正它以显示与导入日期时间一起使用两次的日期时间。
这将在 Python 的语言环境中获取一个日期时间对象。保存在文件系统中的 mtime 应该以秒和纳秒为单位记录为 UTC。
@ShadowRanger 是对的,这个答案有很多错误,包括链接。
我建议添加时区参考【参考方案2】:
如果你想要一个可读的字符串,这对我有用:
import datetime
mtime = path.stat().st_mtime
timestamp_str = datetime.datetime.fromtimestamp(mtime).strftime('%Y-%m-%d-%H:%M')
【讨论】:
这就是答案。 很高兴将其更改为 ISO 8601 和 RFC 3339 '%Y-%m-%d %H:%M:%S' 或 '%Y-%m-%dT%H :%M:%S' 更多见medium.com/easyread/…以上是关于从 stat().st_mtime 到 datetime?的主要内容,如果未能解决你的问题,请参考以下文章
python os模块atime ,ctime,mtime意义