C# 时区信息DST与Windows设置

C# 时区信息DST与Windows设置,c#,.net,timezone,dst,C#,.net,Timezone,Dst,是否反映Windows日期和时间设置中“自动调整夏令时”的禁用/启用状态 我正试图在用户无法访问Windows的kiosk模式应用程序中复制这些设置,并且我已经成功地使一切工作正常,包括使用tzutil设置带或不带DST的时区,但在测试时,我注意到一些时区DST设置(如莫斯科)与Windows不同步 我们知道俄罗斯几年前就取消了DST,所以当我去Windows并选择莫斯科作为我的时区时,我看到: 启动测试控制台应用程序(.NET 4.6.1),然后从GetSystemTimeZones获取当前

是否反映Windows日期和时间设置中“自动调整夏令时”的禁用/启用状态

我正试图在用户无法访问Windows的kiosk模式应用程序中复制这些设置,并且我已经成功地使一切工作正常,包括使用tzutil设置带或不带DST的时区,但在测试时,我注意到一些时区DST设置(如莫斯科)与Windows不同步

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

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

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

我甚至通过调用Win32函数来检查DynamicDaylightTimeDisabled是否为true或false(尽管我不能完全确定这是否反映了Windows中的设置)来进行测试。我第一次尝试使用我的实时时区(赫尔辛基),结果是:

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

我在俄罗斯尝试过,DynamicDaylightTimeDisabled的值为false,所以启用了日光

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


我真的很困惑,非常感谢你的帮助。谢谢大家!

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

俄罗斯时区确实支持DST,但只是在2014年之前,所以我真正要做的是打电话给国家统计局,看看DST在这个时间点是否有效

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

我在那里做了一段时间的疯狂追逐。。。我们生活和学习


更新:通过检查调整规则,我决定不复制窗口。太多的努力和复杂性没有什么价值。不,谢谢

这是一个很好的问题。我希望您能找到答案。请查看
.m\u调整规则
。您可以看到,2014年后没有生效的调整规则。感谢glenebob,您的评论让我找到了正确的答案。我应该读更多关于这些调整规则的书!是的,你说得对<如果有任何调整规则,则code>TimeZoneInfo.SupportsDaylightSavingTime将为真。关于
DynamicDaylightTimeDisabled
,只有当时区在当前年份中有一个转换,并且用户专门将切换开关设置为off时,才是真的。此外,如果您愿意,您可以在
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
Oh查看注册表中的此值,在图像中,您似乎正在匹配
StandardName
。不要这样做-这些会本地化。请改用
Id
属性。您也可以使用
FindSystemTimeZoneById
来代替LINQ。另外,不要使用
时区.CurrentTimeZone
。使用
TimeZoneInfo.Local