为什么文件的创建时间戳与其他设备不同?

时间:2019-12-09 13:27:49

标签: ios objective-c linux file computer-science

我在MAC上使用stat -t "%s" filename,然后得到如下一行:

16777223 9414940 -rwxr-xr-x 1 name staff 0 10838392 "1569834440" "1567413629" "1567413629" "1567413629" 4096 21176 0 filename

根据man stat,第二个时间戳记("1567413629")是此文件的创建时间戳记。

但是当我在Objective-C中使用代码来获取文件的创建时间时,会发生一些奇怪的事情。我得到了创建时间"1567413631",而我期望的是"1567413629"。目标代码如下:

NSDate * createDate = ((WMMediaAsset *)section.assets[index]).creationDate;
NSString * timestamp = [NSString stringWithFormat:@"%lld", (long long)([createDate timeIntervalSince1970])];

我认为创建时间戳是文件内部的绝对值记录。将文件复制到另一台设备不会更改文件的创建时间。

我错了吗?您能给我一些提示或提醒我应该去哪里找到更多信息吗?

1 个答案:

答案 0 :(得分:0)

您正在读取的创建日期来自文件系统,而不是来自文件(元)数据本身的日期,例如复制的数码照片在拍摄时(因此在创建原始文件时)可能包含一个EXIF日期,该日期不同于副本的文件系统创建日期。

某些系统在复制文件时可能会保留原始的创建日期,通常是在文件系统级别以上完成的,例如首先创建一个副本,该副本将当前时间作为其创建日期,然后进行系统调用以将创建日期更改为原始日期。

以macOS为例,如果在Finder中复制了文件,则副本将从原始文件继承其创建日期。但是,如果使用cp在外壳中完成复制,则创建日期不会被继承。