TimeZoneInfo DST与Windows设置

时间:2018-05-09 13:55:48

标签: c# .net timezone dst

TimeZoneInfo.SupportsDaylightSavingTime是否反映了Windows日期和版本中“自动调整夏令时”的禁用/启用状态。时间设置?

我正在尝试在用户无法访问Windows的自助服务终端模式应用中复制这些设置,并且我设法让一切正常运行,包括使用tzutil设置带或不带DST的时区,但在测试时我注意到了一些时区DST设置(如莫斯科)与Windows不同步。

我们知道几年前俄罗斯摆脱了DST,所以当我去Windows并选择莫斯科作为我的时区时,我看到了:

Adjust for DST automatically is off, because it's not supported?

启动我的测试控制台应用程序(.NET 4.6.1),然后从GetSystemTimeZones获取当前时区时,我发现它确实支持DST:

DST is supported

如果SupportsDaylightSavingTime为true,是否应该在Windows设置中启用切换开关?

我甚至通过调用Win32函数GetDynamicTimeZoneInformation来检查DynamicDaylightTimeDisabled是真还是假(尽管我不完全确定这是否反映了Windows中的设置)。我首先尝试使用我的真实时区(赫尔辛基),结果是:

当切换开关打开时, DynamicDaylightTimeDisabled false ,但当切换关闭时,它变为 true 。所以我认为它可能确实反映了它?

我试过俄罗斯, DynamicDaylightTimeDisabled 的值是 false ,所以启用了日光?

如果有帮助,我的Windows版本是 10.0.17134 Build 17134

我真的对此感到困惑,非常感谢一些帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

正如glenebob在评论中指出的那样,原因是2014年之后没有调整规则生效,俄罗斯决定不再使用DST。

俄罗斯时区确实支持 DST,但仅限于2014年之前,所以我真正需要做的是致电TimeZoneInfo.GetAdjustmentRules以确定此时DST是否有效或不。

我正在开发的应用程序也在使用UWP API,实际上缺少这种方法,但这是一个完全不同的问题......

我在那里进行了一次疯狂的追逐......我们生活和学习......

更新:我决定不通过检查调整规则来复制Windows。太多的努力和复杂性的价值很小。不,谢谢!