该结构是表示数字
的64位值 自1601年1月1日以来的100纳秒间隔。
为什么设置“自1601年以来”?为什么不unix时间1970年甚至2000年? 在时间日期如此遥远的兼容性我能做些什么?
回答自己。
ANSI日期将1601年1月1日定义为第1天,并用作COBOL整数日期的来源。这个时代是公历前一个400年闰年周期的开始,该公历于2000年结束。 正如您在Julian_day条目下的维基百科中所见。
答案 0 :(得分:40)
因为1/1/1601是时代的开始。
从Raymond Chen那里拿走:
Why is the Win32 epoch January 1, 1601?
FILETIME
结构自1601年1月1日起以100纳秒的间隔记录时间。为什么选择该日期?公历运行400年周期,1601是Windows NT设计时活动周期的第一年。换句话说,选择它可以很好地计算出数学。
我实际上有Dave Cutler发来的电子邮件确认了这一点。
答案 1 :(得分:7)
那么,1601年1月1日是17世纪的第一天。钟摆是在17世纪发明的,可以将时间测量精确到1秒。因此(在理论上)现有文献中可能存在从该时期到时间点的参考文献。
但实际上,选择是任意的。必须有一个“时代”,并提供
时代足够远,“负时间”值很少,
将来几年之后,环绕时间已经足够了,
任何选择都可以。
但是,嘿,如果你担心的那么多,请给史蒂夫巴尔默写一封信。我倾向于相信Ian Boyd的回答。其中的原因是它使数学更容易(格里高利闰年计算)。鉴于这种简化有多么微小,以及它背后的推理有多弱,它(IMO)“基本上”是任意的。 (不是我说这是错的......)
答案 2 :(得分:4)
这是一个务实的选择。
直到1752年英国(及其殖民地)采用公历时,现代西方历法并不一致,自1582年以来,欧洲大部分天主教徒采用了公历。
这是具有闰年等的现代日历,以保持1月1日与冬至一致。
那么为什么不从1752年1月1日开始呢?因为基本的闰年规则“如果两位数年份可以被4整除,除非四位数世纪也能被4整除”,它就是闰年,建立了一个400年的周期。第一个完整周期从1601年1月1日开始,(至少在罗马)。
闰年和日期的计算是痛苦的,没有从四百年的周期中开始,所以只要你记得1752年之前的任何日期需要通过地理位置来确定,1600年是一个相当不错的开始,因为英国的日期10天不同步。这个时候罗马日期。
答案 3 :(得分:2)
正如已经提到的,我认为流行的答案是因为公历运行了400年的周期,1601是在设计Windows NT时活动的第一年。
1601年1月1日是COBOL整数日期的起源。
ANSI日期格式也是第1天。
如果你根据ISO8601进一步推测这是它所处的格式,那么在1583年之前的时间是基于每年有366天的公历格里高利历。也许他们只是到了下个世纪。