1601 年 1 月 1 日が時代の始まりだったからです。
レイモンド・チェンからそれを取ります:
このFILETIME
構造体は、1601 年 1 月 1 日から 100 ナノ秒間隔で時間を記録します。なぜその日付が選ばれたのでしょうか?
グレゴリオ暦は 400 年周期で動作し、1601 年は Windows NT が設計された時点でアクティブだった周期の最初の年です。言い換えれば、数学をうまく出すために選ばれたのです。
私は実際にこれを確認する Dave Cutler からの電子メールを持っています。
ボーナスおしゃべり
RFC4122 UUIDも 100nsティックを測定しますが、それらは 10/15/1582 から始まります (FILETIME
の 1/1/1601 とは対照的に:
Date Ticks Uuid Epoch ticks
---------------------- ------------------ ------------------
1582-10-15 -5748192000000000 0 Start of uuid epoch
1601-01-01 0 0x00146BF33E42C000 Start of Windows epoch
1899-12-30 0x014F35A9A90CC000 0x0163A19CE74F8000 Lotus 123/Excel/Access/COM zero date
1900-01-01 0x014F373BFDE04000 0x0163A32F3C230000 SQL Server zero date
1970-01-01 0x019DB1DED53E8000 0x01B21DD213814000 Unix epoch timestamp
2000-01-01 0x01BF53EB256D4000 0x01D3BFDE63B00000
2010-01-01 0x01CA8A755C6E0000 0x01DEF6689AB0C000
2020-01-01 0x01D5C03669050000 0x01EA2C29A747C000
//FILETIME eras
1972-01-21 11:43:51 PM 0x01A0000000000000 0x01B46BF33E42C000 Start of 0x01A era
1986-04-30 11:43:13 AM 0x01B0000000000000 0x01C46BF33E42C000 Start of 0x01B era
2000-08-06 11:42:36 PM 0x01C0000000000000 0x01D46BF33E42C000 Start of 0x01C era
2014-11-14 11:41:59 AM 0x01D0000000000000 0x01E46BF33E42C000 Start of 0x01D era
2029-02-20 11:41:22 PM 0x01E0000000000000 0x01F46BF33E42C000 Start of 0x01E era
2043-05-31 11:40:44 AM 0x01F0000000000000 0x02046BF33E42C000 Start of 0x01F era
//UUID eras
1968-02-11 11:43:13 AM 0x019B940CC1BD4000 0x01B0000000000000 Start of uuid 0x01B era
1982-05-20 11:42:36 PM 0x01AB940CC1BD4000 0x01C0000000000000 Start of uuid 0x01C era
1996-08-27 11:41:59 AM 0x01BB940CC1BD4000 0x01D0000000000000 Start of uuid 0x01D era
2010-12-04 11:41:22 PM 0x01CB940CC1BD4000 0x01E0000000000000 Start of uuid 0x01E era
2025-03-13 11:40:44 AM 0x01DB940CC1BD4000 0x01F0000000000000 Start of uuid 0x01F era
ボーナスおしゃべり
Excel では、12/30/1899
Lotus 1-2-3 とのバグごとの互換性を維持するために、ゼロの日付を使用しています。これは、Excel が 1900 年 2 月をうるう年と見なす理由でもあります (Lotus 1-2-3 の担当者がうるう年だと考えていたためです)。March 1, 1900
これが、Excel で以前の日付を表すことも不可能な理由です。