为什么文件的创建时间戳因设备不同而不同?

Why a file's creation timestamp is different from different device?

我在 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"。 Objective 代码如下:

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

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

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

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

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

举个例子,在 macOS 中,如果在 Finder 中复制文件,则副本会继承原始文件的创建日期。但是,如果使用 cp 在 shell 中完成复制,则不会继承创建日期。