文件属性是否包含毫秒? 目的
我想从文件属性的创建时间获得毫秒当我得到文件属性时,我使用NSDateFormatter将文件创建时间(NSDate)转换为NSString。
[dateFormatter setDateFormat:@“yyyy-MM-dd HH:mm:ss:SS:A”];
我得到00的SS和54487000 A.我注意到,最后三位数字始终为零,NSDate来自任何文件的文件属性。 但是当我使用NSDate的相同格式化程序来自[NSDate日期]时,A的最后三位数字不为零,并且SS数字不总是为零。
目标c中检索的文件属性是否包含文件属性?
这可能取决于您所在的操作系统以及该文件所处的文件系统类型。 我假设你在iOS上(在这种情况下,你正在使用iOS恰好使用的任何文件系统)。
stat
系统调用返回关于一个文件的信息,包括几个时间戳,这些信息位于一个名为struct stat
的结构中。 该结构将每个时间戳存储为struct timespec
。 struct timespec
包含一个秒字段tv_sec
和一个纳秒字段tv_nsec
。 所以从理论上讲,你可以得到纳秒级的时间戳文件。
实际上,它看起来像你只能得到第二个分辨率的时间戳。 我测试了这个代码:
struct stat sb;
stat([NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"].UTF8String, &sb);
在我的iPhone 4S上运行iOS 5.0.1,并得到了这样的结果:
(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日午夜以来的秒数。 (请参阅技术说明TN1150。)据推测,它们在某些时候将时间戳扩展为64位(或者在2040年之前32位时间戳将环绕时会这样做),但显然它们没有添加任何小数位。
链接地址: http://www.djcxy.com/p/35179.html