我有一个非常简单的DateTime对象,设置为日期01-01-0001.我提供了一个值,以天为单位添加到此DateTime.我看到我的结果出现了意想不到的偏差,两天.让我假装我打印出AddDays()调用的结果,如下所示:
DateTime myDateTime = DateTime.Parse("01-01-0001 00:00:00");
Console.WriteLine(myDateTime.AddDays(735768.0));
Run Code Online (Sandbox Code Playgroud)
使用上面的值(735768.0),我预计输出为"6/18/2015 12:00:00 AM".但是,相反,我得到"6/20/2015 12:00:00 AM".当我访问以下网站并计算01-01-0001 - > 06/18/2015之间的持续时间时,我得到的值为735,768天,如预期:
http://www.timeanddate.com/date/durationresult.html?m1=01&d1=01&y1=0001&m2=06&d2=18&y2=2015
我做错了什么,或者我不知道引擎盖下有什么事吗?
如果您想知道,735,768代表我正在使用的数据的第一次值.预计数据将于06/18/2015 00:00:00开始.
编辑:我应该注意,我只是将该特定网站作为冲突源的示例提供.其他网站,包括政府气象局,我得到的数据都给了我06-18-2015.这并不意味着C#是错误的.我更加好奇这个偏移的来源,以及为什么.
Timeanddate.com考虑了从Julian到Gregorian的日历变化,这解释了差异.
如果你在timeanddate.com上查看01/01/1752和01/01/1753之间的区别,你实际上可以看到这种变化:

根据Jon Skeet的回答,DateTime基本上只使用格里高利历.这就是为什么上述细微之处没有反映在.NET的计算中.
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |