2

ファイル属性の作成時刻からミリ秒を取得したい ファイル属性を取得すると、NSDateFormatterを使用してファイル作成時間(NSDate)をNSStringに変換します。ファイル属性にミリ秒が含まれていますか?目的-c

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

  • SS - >秒
  • SSは - 私はSSのために00を取得し、A. のための54487000を取得した日付

の>ミリ秒 - >ミリ秒

  • Aでなければなりません私は最後の3桁はNSDateのファイル属性から来ているので常にゼロであることに気づきます。 NSDateが[NSDate date]のものと同じフォーマッタを使用すると、最後の3桁はAではゼロでなく、SS桁は常にゼロではありません。

    Objective cで取得されたFile Attributeにfile属性が含まれていますか?

  • +1

    なぜその精度は必要でしょうか?ただ尋ねる。 –

    +1

    例えば、1秒以内に修正されたいくつかのファイルのうち最後に修正されたファイル(N番目のファイルの内容に基づいてN-1ファイルを生成する)を確認するには、 –

    答えて

    3

    これは、使用しているオペレーティングシステムとファイルの種類によって異なります。私はあなたがiOS上にいると仮定します(その場合は、iOSが使用するファイルシステムを使用しています)。

    statシステムコールは、いくつかのタイムスタンプを含むファイルに関する情報をstruct statという構造体に返します。構造体は、各タイムスタンプをstruct timespecとして格納します。 struct timespecには秒のフィールドtv_secとナノ秒のフィールドtv_nsecが含まれています。理論的には、ファイルに対してナノ秒解像度のタイムスタンプを取得できます。

    実際には、2番目の解像度のタイムスタンプしかないようです。私はこのコードを使用してテスト:iOSの5.0.1を実行している私のiPhone 4Sの

    struct stat sb; 
    stat([NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"].UTF8String, &sb); 
    

    、その結果得た:

    (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でも使用されていた)は、1904年1月1日午前0時からの秒数を表す32ビットの符号なし整数に各タイムスタンプを保存しました。 (おそらく、ある時点で、タイムスタンプを64ビットに拡張した(または、2040年以前に32ビットタイムスタンプがラップアラウンドする)ので、分数ビットを追加しなかったようです。

    関連する問題