我在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])];
我认为创建时间戳是文件内部的绝对值记录。将文件复制到另一台设备不会更改文件的创建时间。
我错了吗?您能给我一些提示或提醒我应该去哪里找到更多信息吗?
答案 0 :(得分:0)
您正在读取的创建日期来自文件系统,而不是来自文件(元)数据本身的日期,例如复制的数码照片在拍摄时(因此在创建原始文件时)可能包含一个EXIF日期,该日期不同于副本的文件系统创建日期。
某些系统在复制文件时可能会保留原始的创建日期,通常是在文件系统级别以上完成的,例如首先创建一个副本,该副本将当前时间作为其创建日期,然后进行系统调用以将创建日期更改为原始日期。
以macOS为例,如果在Finder中复制了文件,则副本将从原始文件继承其创建日期。但是,如果使用cp
在外壳中完成复制,则创建日期不会被继承。