ctime、atime 和 mtime - 如何解释它们?

use*_*743 6 python linux

我正在用 Python 编写一个程序,需要比较几个目录的 atime、mtime 和 ctime。为此,我正在使用os.stat("my_directory/"). 结果我得到的是一个包含这些时间的字符串。对于示例目录,我有:

st_atime=1418911410L
st_mtime=1418911410L
st_ctime=1404656050L
Run Code Online (Sandbox Code Playgroud)

我的问题是我对这些数字有些困惑。我想知道这些数字是否可以转换为实际时间?或者,如果一个数字(比如 ctime)比另一个小(比如 atime),这是否意味着 ctime 早于 atime 或更晚?我已经搜索了许多网站来了解这一点,但我的尝试没有成功。有人可以帮助我吗?提前致谢。

Mar*_*ers 6

引用os.stat()功能文档

:的确切含义和分辨率st_atimest_mtime以及st_ctime属性取决于操作系统和文件系统上。例如,在使用 FAT 或 FAT32 文件系统的 Windows 系统上,st_mtime具有 2 秒分辨率,并且st_atime只有 1 天分辨率。有关详细信息,请参阅您的操作系统文档。

对于 Linux,该系统文档是stat (2)联机帮助页

struct timespec st_atim;  /* time of last access */
struct timespec st_mtim;  /* time of last modification */
struct timespec st_ctim;  /* time of last status change */
Run Code Online (Sandbox Code Playgroud)

其中timespec定义在man time(2)

它的时间代表自纪元以来的秒和纳秒。

其中 Epoch 是UNIX Epoch。该值越高,自该纪元(即 1970 年 1 月 1 日,UTC 午夜)以来经过的时间越长。

Pythontime模块以相同的方式处理时间,并且该datetime模块具有类方法,这些方法也会为您提供datetime来自此类值的对象:

>>> import datetime
>>> datetime.datetime.fromtimestamp(1418911410L)
datetime.datetime(2014, 12, 18, 14, 3, 30)
Run Code Online (Sandbox Code Playgroud)

如上所示,三个字段分别代表访问时间、修改时间和状态更改时间。


Mar*_*c B 5

ctime - 文件的 inode 上次更改时间(例如权限更改、文件重命名等)
mtime - 文件内容的
上次更改时间 atime - 上次访问文件的时间。

这些数字只是 unix 时间戳——有符号的 32 位整数代表自 1970 年 1 月 1 日以来的秒数,也就是纪元。

是的,数字越小=时间越早。


And*_*ndy 2

通过使用stat模块解释stat()结果并将纪元转换为日期时间,您可以从中获得有用的信息:

import os
import datetime

print datetime.datetime.fromtimestamp(os.stat(".").st_atime)
Run Code Online (Sandbox Code Playgroud)

这会打印出一个日期时间对象,显示上次访问当前目录的时间:

datetime.datetime(2014, 12, 17, 7, 19, 14, 947384)
Run Code Online (Sandbox Code Playgroud)