gpt4 book ai didi

C# DateTime AddDays 意外偏移

转载 作者:太空狗 更新时间:2023-10-29 22:36:48 26 4
gpt4 key购买 nike

我有一个非常简单的 DateTime 对象,它被设置为日期 01-01-0001。我被提供了一个值以添加到此 DateTime,以天为单位。不过,我发现两天的结果出现了意想不到的偏移。假设我打印了 AddDays() 调用的结果,如下所示:

DateTime myDateTime = DateTime.Parse("01-01-0001 00:00:00");
Console.WriteLine(myDateTime.AddDays(735768.0));

根据上面看到的值 (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 的日历更改,这解释了差异。

如果您查看 01/01/1752 and 01/01/1753 之间的差异,您实际上可以看到这种变化发生了在 timeanddate.com 上:

Dates and times. They're crazy!

  • 儒略历闰年的公式是“每一年都可以被 4 整除”。这意味着当日历发生变化时,timeanddate.com 在 1 年和 1752 年之间的计算中有更多的闰年。这使得 .NET 到 1753 年的计算落后了 11 天。
  • Until 1752 , 英国和美国东海岸使用 Julian Calendar .这一变化的结果是 1752 年只有 355 天。 .NET 的计算未考虑此计算,因此此时,.NET 的计算提前两天。

根据 this answer by Jon Skeet , DateTime 本质上只使用公历。这就是为什么上述微妙之处没有反射(reflect)在 .NET 的计算中。

关于C# DateTime AddDays 意外偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com