Is DST enabled?
在Windows 7的"时区设置"中,您可以启用或禁用"自动调整夏令时的时钟"。 如果禁用此选项,则PC时钟将始终显示标准时间,即使时区设置为夏令时之后的时区也是如此。
此问题询问是否启用了DST,但答案仅表示当前日期/时间是否在DST规则范围内,因此应进行调整,但操作系统的设置表示将时间保留在标准时区。
如何从C#获得"自动调整夏令时的时钟"
如果您只想知道本地时区是否支持DST,请使用:
1 | bool hasDST = TimeZoneInfo.Local.SupportsDaylightSavingTime; |
在以下任何一种情况下,这都是错误的:
-
所选时区不使用夏令时(如亚利桑那州和夏威夷州)
-
所选时区使用DST,但用户已清除"自动调整夏令时时钟"复选框。
如果您特别想知道用户是否已为通常支持它的时区禁用DST,请执行以下操作:
1 2 3 4 | bool actuallyHasDST = TimeZoneInfo.Local.SupportsDaylightSavingTime; bool usuallyHasDST = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id) .SupportsDaylightSavingTime; bool dstDisabled = usuallyHasDST && !actuallyHasDST; |
仅当用户明确清除了"自动调整夏令时时钟"复选框时,
这是如何运作的?
-
Windows将选定的时区设置存储在注册表中:
1HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation -
清除该框时,
DynamicDaylightTimeDisabled 键设置为1 。否则设置为0 。您提到的另一个问题中的一个答案专门检查了该值,这也是一个可接受的解决方案。
-
调用
TimeZoneInfo.Local 会考虑该密钥中的所有信息。 -
通过
Id 查找时区不会考虑注册表中的任何信息,除了Id 本身,它存储在TimeZoneKeyName 值中。 -
通过将注册表创建的信息与查找的信息进行比较,您可以确定是否已禁用DST。
请注意,在