.NET DateTime.ToLocalTime 是否在 DST 更改后持续存在?
Does .NET DateTime.ToLocalTime persist across DST changes?
英国的时钟在 25/10/2015 更改
如果我在 2015 年 10 月 24 日和 2015 年 10 月 26 日再次 运行 下面的代码,是否会产生相同的输出?
根据我对 C# 中 DateTime 的工作原理的了解,我假设是的,但我想仔细检查一下,因为它对我的应用程序至关重要。
// 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());
ToLocalTime 使用当前时区的规则,而不仅仅是当前偏移量来计算本地时间。在 2015-01-01 00:00
和 2015-04-01 00:00
上调用 ToLocalTime
将 return 相同的结果,无论调用是在 DST 更改之前还是之后进行的。
我当前的偏移量是+2,但是在第一种情况下调用示例代码returns 1/1/2015 2:00:00 am
,在第二种情况下调用1/4/2015 3:00:00 am
。
检查 ToLocalTime 的参考源显示该方法检查是否需要在 return 本地时间之前的特定日期应用夏令时:
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);
英国的时钟在 25/10/2015 更改
如果我在 2015 年 10 月 24 日和 2015 年 10 月 26 日再次 运行 下面的代码,是否会产生相同的输出?
根据我对 C# 中 DateTime 的工作原理的了解,我假设是的,但我想仔细检查一下,因为它对我的应用程序至关重要。
// 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());
ToLocalTime 使用当前时区的规则,而不仅仅是当前偏移量来计算本地时间。在 2015-01-01 00:00
和 2015-04-01 00:00
上调用 ToLocalTime
将 return 相同的结果,无论调用是在 DST 更改之前还是之后进行的。
我当前的偏移量是+2,但是在第一种情况下调用示例代码returns 1/1/2015 2:00:00 am
,在第二种情况下调用1/4/2015 3:00:00 am
。
检查 ToLocalTime 的参考源显示该方法检查是否需要在 return 本地时间之前的特定日期应用夏令时:
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);