ファイルの作成時間をミリ秒単位で取得します


13

Windowsでファイルの作成時間をより正確に取得する方法はありますか?mp4-videoの作成時間をミリ秒単位で取得したい。これは可能ですか?


この精度が必要な理由を尋ねる必要がありますか?
モアブ

1
Androidデバイスにビデオと共にいくつかのセンサーデータを記録します。センサーロギングを自分で作成し、各センサー値とともにシステム時間を記録しました。ビデオを録画するには、標準のカメラアクティビティを使用します。データをPCに送信した後、分析します。ビデオをセンサーデータとマージするには、ビデオがいつ開始されたかを知る必要があります。秒は少し粗すぎるので、ビデオのより正確な開始時間を取得する方法を探しています。
フィル

3
注:2つのデータストリーム間でこのような関係が必要な場合、通常、登録信号をストリームに入れることが不可欠です(監督が「アクション」を呼び出すときに映画で使用される古い下見板のように。キュー。2つ以上のストリームを後で同期できます)。状況によっては、カーネルモードでファイルを作成(およびタイムスタンプを記録)してからプロセスを起動して使用するファイルハンドルがあることを知らせるまでの時間遅延は、実際にはデータの許容値よりも大きくなる場合があります。
コートアンモン-復活モニカ

Androidから他の場所にコピーするときは、すべてのコピーツールがタイムスタンプの精度を維持していることを確認してください。多くのコピーツールはctime、コピーがコピーされた時刻になるように注意してください。
ピーターコーデス

1
Windowsでは、cygwin / mingw statを使用して3つのタイムスタンプをすべて取得します。もちろん、それは私が通常GNU / Linuxを使用しているからです。
ピーターコーデス

回答:


23

タイムスタンプの解像度

Windowsでのファイルの作成タイムスタンプは、ファイルシステムによって異なります。

  • FAT / VFATの最大解像度は2秒です

  • NTFSの最大解像度は100 nsです


wmicソリューション

を使用wmicして、ファイル作成日を最も近いマイクロ秒まで取得できます。

例:

F:\test>wmic datafile where name="f:\\test\\test.txt" get creationdate | findstr /brc:[0-9]
20150329221650.080654+060

creationdate 20150329221650.080654+060は、次の形式のタイムスタンプです。

yyyymmddHHMMSS.xxxxxxsUUU

どこ:

  • yyyy 4桁の年(0000〜9999)。

  • mm 2桁の月(01〜12)。

  • dd 月の2桁の日(01〜31)。

  • HH 24時間制(00〜23)を使用した2桁の時間。

  • MM 時間の2桁の分(00〜59)。

  • SS 分(00から59)の2桁の秒数。

  • xxxxxx 秒の6桁のマイクロ秒数(000000〜999999)

  • s協定世界時(UTC)からの正または負のオフセットを示すプラス記号(+)またはマイナス記号(-)。

  • UUU 発信元のタイムゾーンがUTCから外れる分数を示す3桁のオフセット。


統計ソリューション

statcygwinまたはmingwインストールから)を使用することもできます。

例:

DavidPostill@Hal /f/test
$ stat test.txt | grep Birth
 Birth: 2015-03-29 22:16:50.080654200 +0100

比較のためのdir出力

F:\test>dir /t:c test.txt
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

29/03/2015  22:16                32 test.txt
               1 File(s)             32 bytes
               0 Dir(s)  1,798,546,849,792 bytes free

参考文献


@NateEldredgeありがとう、よくわかりました。回答が修正されました。
DavidPostill

4
注意事項:タイムスタンプに100ナノ秒の桁などの高頻度の数字が含まれているからといって、100nsの範囲で信頼できる時刻源としてクロックを使用できるというわけではありません。単に単調で、「リアルタイム」と大まかに相関するコンテンツのビットがたくさんあると述べているだけです。
コートアンモン-復活モニカ

1
msdn CIM_DATETIMEを参照してください。表記法でxxxxxxは、6桁のマイクロ秒数(000000〜999999)です。Micro-、つまり10^-6。もちろん、最初のトリプレットはミリ10^-3)を表します:丸められず、切り捨てられます。抽出された2番目のトリプレットは、それ自体では何も表しません ...ただし、一部のwmi日時値は000常に2番目のトリプレットを示します。たとえば、wmic OS get LocalDateTime
JosefZ

1
おかげで、これらの種類の答えは私がスタック交換を愛する理由です:)
フィル

1
@MarisB。あ。回答が更新されました。
DavidPostill

1

巧妙な方法がここに示されています:https : //stackoverflow.com/questions/5180592/showing-ntfs-timestamp-with-100-nsec-granularity

VBScriptを使用してWMIのCIMデータベースを照会FILETIMEし、ファイルに関連付けられた構造を返します。

また、デジタルカメラで作成されたメディアのメタデータを管理するためのEXIFtoolなど、メディアファイルのメタデータを検査できるオープンソースツールもあります。


1

Matlabでこれを取得する方法を見つけました:

Jan Simonが作成したGetFileTime関数を使用できます。独自のmexファイルをコンパイルしたくない場合は、コンパイルされたファイルをここからダウンロードすることもできます

wmic(msのみ)を使用するほど正確ではありませんが、私の目的には適しています。


-3

これは、ファイルシステムに依存する NTFSは、FATは、2第2の解像度を有する。理論的には 100ナノ秒の分解能を有するが、実際の解像度は10ミリ秒です。ただし、割り込みはディスクI / Oよりも優先度が高く、書き込みキャッシュがタイムスタンプに与える影響はわかりません。マルチメディアタイマーは精度が最適化されているため、タイミングを実装するための好ましい方法です。

XYplorerなどの既存のツールを使用して、高解像度のタイムスタンプを表示msを示すXYplorerできます。または、独自のアプリケーションを作成することもできます。File.GetCreationTimeメソッドを使用します。Millisecondプロパティを持つDateTime構造体を返します。


1
ええと...失礼なことではありませんが、@ DavidPostillの答えを読みましたか?
td512

2
「理論的にはNTFSの解像度は100 nsですが、実際には 分解能は10ミリ秒である」である間違った -リンクが実際に言うことを「NT FAT上で、時間を作成する10ミリ秒の解像度を持っています」。それは、NTFSがその解像度を持っているという意味ではありませ。私の答えから、NTFS では最も近いマイクロ秒の解像度が表示されることがわかりますwmic
DavidPostill

理論解像度と最大解像度には違いがあり、1つは最大解像度を示し、もう1つは平均解像度を示します。
ラムハウンド

1
@DavidPostillクロックが10ミリ秒ごとに時間をインクリメントするだけの場合、100ナノ秒を表すことができるdatetimeを保持しても、精度は10ミリ秒にすぎません。典型的なUtcNow API(時間を測定するために設計された高性能カウンターとは対照的に)は、ウィンドウで0.5〜16msごとに時間を増加させるため、この答えは非常に妥当です。
CodesInChaos

@CodesInChaosはい -Windowsソースコードにアクセスできないため、ファイルのタイムスタンプを操作するときに内部でどの呼び出しが使用されているかわかりません。実際の解像度が何であるかはわかりません-それは単なる推測です。
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.