クイック分析

クイック分析

スキャンした古い写真の作成日を 1970 年の日付に設定したいのですが、サードパーティのツールを使用してこれを行うと、Windows エクスプローラーでは日付が空白で表示されます。NTFS はいつか 1600 年代まで遡ることができると思っていました。何が起こっているのでしょうか?

答え1

クイック分析

フォルダーを参照する場合、Windows エクスプローラーでは特定の範囲外の日付は表示されません。

MS-DOS の日付形式では、1980 年 1 月 1 日から 2107 年 12 月 31 日までの日付のみを表すことができます。

ソース:FileTimeToDosDateTime 関数

これは日付を手動で設定することで確認できます。

スクリーンショット1

この動作は下位互換性に関連していると私は推測しています。NTFS存在しなかったため、作成日、変更日、アクセス日はそれぞれ 16 ビット (2 バイト) を占めるように設計されました。情報は次のようにまとめられます。

Bits | Description
-------------------------------------------------------
0–4  | Day (1-31)
5–8  | Month (1 = January, 2 = February, etc.)
9-15 | Year offset from 1980 (0 = 1980, 1 = 1981, etc.)

ビットを節約するため、年は整数として保存されず、代わりにオフセットが使用されます。7 ビットあるため、2^7 = 128可能な値は 1980 ~ 2107 です。

NTFS に関しては、ドキュメントには次のように書かれています。

ファイル時間は、協定世界時 (UTC) 1601 年 1 月 1 日午前 12:00 から経過した 100 ナノ秒間隔の数を表す 64 ビット値です。システムは、アプリケーションがファイルを作成、アクセス、および書き込みを行うファイル時間を記録します。

NTFS ファイル システムは、時刻値を UTC 形式で保存するため、タイム ゾーンの変更や夏時間による影響を受けません。FAT ファイル システムは、コンピューターのローカル時間に基づいて時刻値を保存します。

ソース:ファイル時間

参考文献


回避策

場合によっては、この問題を回避するためにEXIFタグ:

スクリーンショット2

ファイル プロパティ ダイアログには、基盤となるファイル システムでサポートされている任意の日付を表示できます。

スクリーンショット3

次のコマンドを使用する場合、コマンドライン インターフェイスでも同様ですdir

01/01/1601  02:23 AM                 0 1-oldest.txt
01/01/1970  02:23 AM                 0 2-older.txt
01/01/1980  02:23 AM                 0 3-old.txt
01/01/2014  02:23 AM                 0 4-current.txt
01/01/2107  02:23 AM                 0 5-new.txt
01/01/9999  02:23 AM                 0 6-newer.txt

サードパーティプログラムなど7-ジップ影響を受けない可能性もあります:

スクリーンショット4

関連情報