コンピューターにおける日付の範囲が古代から始まるのはなぜですか?

コンピューターにおける日付の範囲が古代から始まるのはなぜですか?

読むHFS+ に関する Wikipedia の記事、許容される日付範囲は1904年1月1日から2040年2月6日までであることに気づきました。同様に、NTFSの範囲1601 年 1 月 1 日~60056 年 5 月 28 日です。私の考えでは、ファイルの変更/作成日を 1600 年代や 1900 年代に設定する必要があるケースは考えられないので、これは考えるのが馬鹿げています。ファイルが 70 年代、80 年代などに作成/変更されるのは合理的であるため、Unix タイムスタンプのエポックは理解できますが、それらのタイムスタンプのエポックをそれほど過去に設定するのは非論理的に思えます。

答え1

これは NTFS だけではありません。Windows の内部タイムキーピングは、同じ時間形式と同じエポックの開始を使用して行われます。

オリジナルの Unix 32 ビット値が行き止まりであることが既に分かっており (これらのカウンターは 2038 年に終了する)、64 ビットの時間値が既に VMS で使用されていたため、64 ビットのバイナリ時間値が必要であることはわかっていました。64 ビットでは、約 180 億通りの異なる時間値を計算できます。ただし、実際には、上位ビットが設定された時間値は Windows では異なる意味を持つため (VMS の場合と同様)、90 億通りしかありません。そのため、日付と時刻をカウントするために実際に使用できるのは「たった」63 ビットです。

32 ビットの Unix 時間は秒数のみをカウントしますが、Windows のタイムスタンプは 100 ナノ秒単位でカウントします。したがって、時間値 1 は、1601 年 1 月 1 日の真夜中から 100 ナノ秒経過したことを意味します。

しかし、なぜこのような「歴史的な」日付を選んだのでしょうか?

まあ、まず、電子計算機を含む最も古い400年周期の最初の年だったので、曜日やそれに似た計算が少し簡単になります。非常に権威あるサポートその理由からです。

しかし、現代のコンピューティングの文脈では、異なる開始年に対応するために必要な追加のコンピューティング能力は、文脈上かなり小さいだろうと私は考えざるを得ません。

1601 年 1 月 1 日は、ANSI 日付の計算の起点となる日付でもあります。したがって、「Windows 日付」は「ANSI 日付」と同じ日付番号であり、さまざまな場所で物事が少し簡単になります。

また、グレゴリオ暦の「1年目」としても標準化されています (ただし、当時はグレゴリオ暦がどこでも採用されていたわけではありません)。

しかし、実用的かつ実用的な理由から、次の点を考慮してください。この日付/時刻形式により、たとえばデータベースで、同じ形式を使用して、過去の日付/時刻を現在のものと並べて表示できます。たとえば、系図データベースでは、祖先の生年月日と死亡日を 400 年以上前にさかのぼって保存できます。これは、信頼できる形式で存在するほとんどの記録よりもはるかに長い期間です。

ユリウス暦からグレゴリオ暦への移行は、国によっては 1582 年に始まり、1926 年まで続いたため、これを 1201 年や 1 年からさらに早く延長しても意味がありません。ANSI 時間形式、さらには Windows の「バイナリ」時間形式で記録されたすべての日付は、グレゴリオ暦であると想定されます。

ちなみに、VMS も同様の方式を使用していますが、その基準時間は 1858 年 11 月 17 日です。これは、スミソニアン天体物理観測所が衛星追跡の「基準日」として選んだ標準です。これは、天文学者が以前、紀元前 4713 年 1 月 1 日の正午から日数を数える元のユリウス日方式を使用していたことに関係しています。この方式では、1858 年 11 月 17 日は修正ユリウス日で 2,400,000 になります。JD の代わりに MJD を使用することで、当時の日付をわずか 18 ビットに収めることができ、これは当時としては重要な偉業でした。この記事詳細については、VMS Engineering までお問い合わせください。

答え2

個別に検討すると、NTFS のタイムスタンプの範囲が広いことは非論理的に思えるかもしれません。しかし、全体像を見ると、それは完全に論理的です。

オペレーティング システムの機能の 1 つは、ほとんどのプログラムで必要となる一連の機能を提供することです。これにより、プログラマーは各プログラムでこれらの共通機能を書き直す時間を無駄にすることなく、プログラムに集中できます。これらの機能を提供しないオペレーティング システムは、成功する可能性は低いです。Windows と Linux は、このような機能を何百も提供しています。

Windows には、日付と時刻を表示および操作するための一連の関数が含まれています。最大限の有用性を実現するために、これらの関数は可能な限り広範囲の日付をカバーしています。多くのプログラムがさまざまな目的でこれらの関数を使用しています。

NTFS ファイル システムは、NT プラットフォームの一部としてリリースされました。他の最新のファイル システムと同様に、ファイルの日付スタンプを保存する何らかの方法が必要でした。論理的に、設計者はアプリケーションに提供されているものと同じシステムを使用することを選択しました。これにより、開発者にとって物事が簡単になります。もちろん、日付の範囲は日付スタンプに必要な範囲よりもはるかに広いですが、コストはかからず、問題も発生しません。日付スタンプに、日付の範囲がより制限された別のシステムを使用することは非論理的だったでしょう。

答え3

日付 (およびビット レベルでの日付の形式指定) は、ファイルのラベル付けだけでなく、計算やその他さまざまな場面でも使用されます。たとえば、歴史学者は Excel の列に 17 世紀または 18 世紀の日付を表示したい場合があります。また、天文学者はこれらの期間の惑星の配置を計算します。

たとえそれを利用する人の数が少ないとしても、損失はわずかです。このフォーマットを 100 年、5000 年、または 60000 年使用できるかどうかは大した問題ではありません。おそらく今後 50 年は持ちこたえられないでしょう。

関連情報