如何在 Python 中获取文件的 ctime 和/或 mtime,包括时区?

And*_*ier 2 python timezone datetime

基于我问的这个相关问题答案,很明显datetime.fromtimestamp(os.path.getctime())在 Python 3.4 中不返回时区感知日期时间对象,但是,根据一些调查,我还发现 HFS+ 文件系统上的 OS X 10.9(例如)似乎与 ctimes 一起维护时区(除非 gls 从我的本地时区和夏令时推断时区):

$ gls -l --full-time -c

-rw-------  1 myuser staff 538 2015-01-04 17:12:57.000000000 +0100 fileone
-rwxr-xr-x 17 myuser staff 578 2015-05-20 06:41:07.000000000 +0200 filetwo
Run Code Online (Sandbox Code Playgroud)

(我正在使用ls 的 GNU 版本

如何从 ctime 获取时区并将其插入/组合到 datetime 对象中?

(我也想为 mtime 提供相同的答案,我认为它会相似)。

jfs*_*jfs 6

ctime 和 mtime 都可用作“自纪元以来的秒数”(由 返回的值time.time())。

要获取本地时区,您可以使用tzlocalmodule

#!/usr/bin/env python
import os
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal

local_timezone = get_localzone()
aware_dt = datetime.fromtimestamp(os.path.getctime(path), local_timezone)
Run Code Online (Sandbox Code Playgroud)

您可能会看到时区信息,因为ls使用本地时区将时间戳转换为具有时区偏移的相应细分时间。

  • @AndrewFerrier:数字(“自纪元以来的秒数”)不取决于时区(“纪元”是全球*同一*时刻)。看一下 `fromtimestamp()` 调用:你可以将 *any* 时区作为第二个参数传递。 (2认同)