文件属性是否包含毫秒? 目的

我想从文件属性的创建时间获得毫秒当我得到文件属性时,我使用NSDateFormatter将文件创建时间(NSDate)转换为NSString。

[dateFormatter setDateFormat:@“yyyy-MM-dd HH:mm:ss:SS:A”];

  • ss - >秒
  • SS - >应该是毫秒
  • A - >毫秒的日期
  • 我得到00的SS和54487000 A.我注意到,最后三位数字始终为零,NSDate来自任何文件的文件属性。 但是当我使用NSDate的相同格式化程序来自[NSDate日期]时,A的最后三位数字不为零,并且SS数字不总是为零。

    目标c中检索的文件属性是否包含文件属性?


    这可能取决于您所在的操作系统以及该文件所处的文件系统类型。 我假设你在iOS上(在这种情况下,你正在使用iOS恰好使用的任何文件系统)。

    stat系统调用返回关于一个文件的信息,包括几个时间戳,这些信息位于一个名为struct stat的结构中。 该结构将每个时间戳存储为struct timespecstruct 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

    上一篇: Does File Attribute contain millisecond? Objective

    下一篇: Is Friday with date format "c" returned as 5 or 6?