.NET DateTime.ToLocalTime是否在DST更改期间保持不变

本文关键字:改期 ToLocalTime DateTime 是否 DST NET | 更新日期: 2023-09-27 18:20:42

在英国,时钟于2015年10月25日更改

如果我在2015年10月24日运行下面的代码,并在2015年1月26日再次运行,会产生相同的输出吗?

根据我对DateTime在C#中的工作原理的了解,我假设是的,但我想仔细检查一下,因为它对我的应用程序至关重要。

// January date outside of DST
var januaryDate = new DateTime(2015, 1, 1, 0, 0, 0, DateTimeKind.Utc);
Console.WriteLine(januaryDate.ToLocalTime().ToString());
// April date inside DST
var aprilDate = new DateTime(2015, 4, 1, 0, 0, 0, DateTimeKind.Utc);
Console.WriteLine(aprilDate.ToLocalTime().ToString());

.NET DateTime.ToLocalTime是否在DST更改期间保持不变

ToLocalTime使用当前时区的规则,而不仅仅是当前偏移量来计算本地时间。在2015-01-01 00:002015-04-01 00:00上调用ToLocalTime将返回相同的结果,无论该调用是在DST改变之前还是之后进行的。

我当前的偏移量是+2,但调用示例代码在第一种情况下会返回1/1/2015 2:00:00 am,在第二种情况下返回1/4/2015 3:00:00 am

检查ToLocalTime的参考源表明,该方法在返回本地时间之前检查是否需要在特定日期应用DST:

Boolean isDaylightSavings = false;
Boolean isAmbiguousLocalDst = false;
Int64 offset = TimeZoneInfo.GetUtcOffsetFromUtc(this, TimeZoneInfo.Local,
                           out isDaylightSavings, out isAmbiguousLocalDst).Ticks;
long tick = Ticks + offset;
//various validations
//...
return new DateTime(tick, DateTimeKind.Local, isAmbiguousLocalDst);