ctime,atime和mtime - 如何解读它们?

时间:2014-12-18 14:48:02

标签: python linux

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

st_atime=1418911410L
st_mtime=1418911410L
st_ctime=1404656050L

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

5 个答案:

答案 0 :(得分:4)

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

这些数字只是unix时间戳 - 签名为32位整数,代表自1970年1月1日以来的秒数,也就是纪元。

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

答案 1 :(得分:2)

您可以使用以下Python代码将这些时间戳转换为datetime个对象:

import datetime

datetime.datetime.fromtimestamp(1418911410L)  # or whatever number you have

答案 2 :(得分:2)

引用os.stat() function documentation

  

注意st_atimest_mtimest_ctime属性的确切含义和分辨率取决于操作系统和文件系统。例如,在使用FAT或FAT32文件系统的Windows系统上,st_mtime的分辨率为2秒,而st_atime的分辨率仅为1天。有关详细信息,请参阅操作系统文档。

对于Linux,该系统文档是stat (2) manpage

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 */

man time(2)中定义了timespec

  

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

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

Python time module以相同的方式及时处理,datetime module有类方法,它们也会从这样的值中为您提供datetime对象:< / p>

>>> import datetime
>>> datetime.datetime.fromtimestamp(1418911410L)
datetime.datetime(2014, 12, 18, 14, 3, 30)

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

答案 3 :(得分:1)

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

import os
import datetime

print datetime.datetime.fromtimestamp(os.stat(".").st_atime)

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

datetime.datetime(2014, 12, 17, 7, 19, 14, 947384)

答案 4 :(得分:1)

除了其他示例之外,strftime也可以做到这一点,

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1418911410))