gpt4 book ai didi

c# - 调用 ToUniversalTime().AddYears().ToLocalTime() 的闰年错误?

转载 作者:行者123 更新时间:2023-11-30 19:22:47 26 4
gpt4 key购买 nike

我在 .NET 的 DateTime 处理中遇到了可能是闰年的情况,特别是 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();

输出是:

START: 1=2/28/2009 11:00:00 PM, 2=2/28/2009 11:00:00 PM
END : 1=2/28/2012 11:00:00 PM, 2=2/29/2012 11:00:00 PM

请注意我所做的变量 ToUniversalTime().AddYears(3).ToLocalTime()AddYears(3) 不同,它提前了一天。

有人遇到过吗?如果这是预期的,有人可以解释其背后的逻辑吗?

注意:是的,最好的方法是完全在 UTC 中工作,而不是在它们之间切换。这不是影响我的东西,而是我遇到的一个怪癖。本质上,我误解了 AddYears() 的工作原理,现在我明白了为什么它在做它正在做的事情(请参阅下面我选择的答案)。

最佳答案

我认为这工作正常。

DateTime dtStartUtc = dtStartLocal.ToUniversalTime();

PST 是 UTC-8。因此,这会将时间转换为 2009 年 3 月 1 日 07:00:00。

DateTime dtEndUtc = dtStartUtc.AddYears(3);

这比之前的时间增加了三年,现在是 2012 年 3 月 1 日 07:00:00。

DateTime dtEndLocal2 = dtEndUtc.ToLocalTime();

这会将结束时间转换回太平洋标准时间,即 2012 年 2 月 29 日 11:00:00。

我想说这只是本地时间和 UTC 时间之间转换的副作用。

关于c# - 调用 ToUniversalTime().AddYears().ToLocalTime() 的闰年错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/603923/

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