从 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.pathpath.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基础最常用且重要的模块总结----建议收藏

在 Linux 上使用 Python 获取文件创建时间

python os模块atime ,ctime,mtime意义

文件时间日期时间

如何在 Python 中获取文件的修改日期/时间? [复制]

python查询文件信息