DateTime
我在 .NET 的处理中遇到了可能是闰年,特别是ToLocalTime()
. 这是一些重现问题的代码(我在太平洋时区):
DateTime dtStartLocal = DateTime.Parse("2009-02-28T23:00:00.0-08:00");
DateTime dtEndLocal = dtStartLocal.AddYears(3);
DateTime dtStartUtc = dtStartLocal.ToUniversalTime();
DateTime dtEndUtc = dtStartUtc.AddYears(3);
DateTime dtEndLocal2 = dtEndUtc.ToLocalTime();
DateTime dtStartLocal2 = dtStartUtc.ToLocalTime();
Console.WriteLine("START: 1={0}, 2={0}", dtStartLocal, dtStartLocal2);
Console.WriteLine("END : 1={0}, 2={1}", dtEndLocal, dtEndLocal2);
Console.ReadLine();
输出是:
开始:1=2/28/2009 晚上 11:00:00,2=2/28/2009 晚上 11:00:00
结束:1=2/28/2012 晚上 11:00:00,2=2/29 /2012 晚上 11:00:00
请注意,我所做的变量ToUniversalTime().AddYears(3).ToLocalTime()
与 just 不同AddYears(3)
,它提前一天。
有没有人遇到过这个?如果这是预期的,有人可以解释其背后的逻辑吗?
注意:是的,最好的方法是完全在 UTC 中工作,而不是在它们之间翻转。这不是影响我的东西,而是我遇到的特殊情况。本质上我误解了它是如何AddYears()
工作的,现在我可以看到它为什么在做它正在做的事情(请参阅下面我选择的答案)。