作者:Cherish雪蕊诗_425 | 来源:互联网 | 2023-06-18 11:32
在Windows7的“时区设置”中,您可以启用或禁用“自动调整夏令时的时钟”.如果禁用此选项,则即使时区设置为“夏令时”之后的时区,PC时钟也将始终显示标准时间.该question
在Windows 7的“时区设置”中,您可以启用或禁用“自动调整夏令时的时钟”.如果禁用此选项,则即使时区设置为“夏令时”之后的时区,PC时钟也将始终显示标准时间.
该question询问是否启用了DST,但答案仅表示当前日期/时间是否在DST规则之内,因此应对其进行调整,但是OS的设置要求将时间保持在标准时区中.
如何从C#获取“自动调整夏令时的时钟”
解决方法:
如果只想知道本地时区是否支持DST,请使用:
bool hasDST = TimeZoneInfo.Local.SupportsDaylightSavingTime;
在以下任一情况下,这都是错误的:
>所选时区不使用DST(例如亚利桑那州和夏威夷)
>所选时区使用DST,但是用户清除了“自动调整夏令时的时钟”复选框.
如果您特别想知道用户是否在通常支持DST的时区禁用了DST,请执行以下操作:
bool actuallyHasDST = TimeZoneInfo.Local.SupportsDaylightSavingTime;
bool usuallyHasDST = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id)
.SupportsDaylightSavingTime;
bool dstDisabled = usuallyHasDST && !actuallyHasDST;
仅当用户明确清除了“自动调整夏令时的时钟”复选框时,dstDisabled变量才为true.如果由于该区域不支持DST开头而该框不存在,则dstDisabled将为false.
这是如何运作的?
> Windows将选定的时区设置存储在注册表中的以下位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
>清除该框后,DynamicDaylightTimeDisabled键将设置为1.否则将其设置为0.
One of the answers in the other question you mentioned专门检查了该值,这也是可以接受的解决方案.
>调用TimeZoneInfo.Local会考虑该密钥中的所有信息.
>通过ID查找时区不考虑注册表中的任何信息,除了ID本身(存储在TimeZoneKeyName值中)之外.
>通过将注册表创建的信息与查找的信息进行比较,可以确定是否已禁用DST.
注意,这在the MSDN documentation for TimeZoneInfo.Local
的备注部分也有很好的描述.