c# - TimeZoneInfo DST 与 Windows 设置

标签 c# .net timezone dst

是否TimeZoneInfo.SupportsDaylightSavingTime在 Windows 日期和时间设置中反射(reflect)“自动调整夏令时”的禁用/启用状态?

我正在尝试在用户无法访问 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 为真,是否应该在 Windows 设置中启用切换开关?

我什至通过调用 Win32 函数进行测试 GetDynamicTimeZoneInformation检查 DynamicDaylightTimeDisabled 是真还是假(虽然我不完全确定这是否反射(reflect)了 Windows 中的设置)。我首先尝试使用我的真实时区(赫尔辛基),结果是:

当切换开关打开时,DynamicDaylightTimeDisabledfalse,但当切换关闭时,它变为true。所以我假设它可能确实反射(reflect)了它?

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

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

我对此非常困惑,非常感谢您的帮助。谢谢!

最佳答案

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

俄罗斯时区确实支持 DST,但只是在 2014 年之前,所以我真正需要做的是调用 TimeZoneInfo.GetAdjustmentRules及时判断夏令时是否有效。

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

有一段时间我是在徒劳地追逐...我们生活和学习...

更新:我决定不通过检查调整规则来复制 Windows。太多的努力和复杂性没有什么值(value)。不,谢谢!

关于c# - TimeZoneInfo DST 与 Windows 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50255214/

相关文章:

c# - 如何取消使用 Rx 调用的异步方法

c# - 如何在 C# 中根据参数在命令行或文件中输出字符串?

javascript - 将多维javascript数组绑定(bind)为c#中的方法参数

java - Metro 服务和 WCF 客户端之间的传输安全

kendo-ui - Kendo UI Scheduler - 忽略时区

java - ZoneDdateTime.get TimeZone() 不是我设置的

c# - .Net 时区验证的正确方法

c# - Dicomize 心电图原始信号数据

c# - 将 OBJECT 转换为 System.Drawing.Color

c# - selectPDF 不从 HTML 字符串保存 PDF