我想从文件属性的创建时间开始获得毫秒当我获得文件属性时,我使用NSDateFormatter将文件创建时间(NSDate)转换为NSString。
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss:SS: A"];
- ss-->秒
- SS-->应为毫秒
- 日期的A-->毫秒
SS得了00分,A得了54487000分。我注意到NSDate的最后三位数字总是零,它来自任何文件的文件属性。但当我使用NSDate来自[NSDate-date]的相同格式化程序时,A的最后三位数字不为零,SS数字也不总是零。
在Objective-C中检索到的文件属性是否包含文件属性?
这可能取决于您所在的操作系统以及文件所在的文件系统类型。我假设您所在的是iOS(在这种情况下,您使用的是iOS碰巧使用的任何文件系统)。
stat
系统调用在名为struct stat
的结构中返回有关文件的信息,包括几个时间戳。该结构将每个时间戳存储为CCD_ 3。CCD_ 4包含秒字段tv_sec
和纳秒字段tv_nsec
。因此,从理论上讲,您可以获得文件的纳秒分辨率时间戳。
在实践中,看起来你只得到第二分辨率的时间戳。我测试了这个代码:
struct stat sb;
stat([NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"].UTF8String, &sb);
在我运行iOS 5.0.1的iPhone 4S上,得到了这样的结果:
(gdb) p sb
$1 = {
st_dev = 234881033,
st_mode = 33188,
st_nlink = 1,
st_ino = 11265454,
st_uid = 501,
st_gid = 20,
st_rdev = 0,
st_atimespec = {
tv_sec = 1330753666,
tv_nsec = 0
},
st_mtimespec = {
tv_sec = 1330753664,
tv_nsec = 0
},
st_ctimespec = {
tv_sec = 1330753664,
tv_nsec = 0
},
st_birthtimespec = {
tv_sec = 1330417559,
tv_nsec = 0
},
st_size = 830,
st_blocks = 8,
st_blksize = 4096,
st_flags = 0,
st_gen = 0,
st_lspare = 0,
st_qspare = {0,
0}
}
您可以看到所有的tv_nsec
字段都是0。这似乎不太可能是巧合。
从历史上看,HFS Plus(Mac OS X原生文件系统,可能也被iOS使用)将每个时间戳存储在一个32位无符号整数中,表示自1904年1月1日午夜GMT以来的秒数,但显然他们没有添加任何分数位。