首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用DST了吗?

启用DST了吗?
EN

Stack Overflow用户
提问于 2014-08-12 20:12:17
回答 1查看 2.1K关注 0票数 3

在Windows 7,时区设置中,您可以启用或禁用“自动调整时钟以节省日光”。如果禁用此功能,则PC时钟将始终显示标准时间,即使时区设置为夏时制之后的时区。

question询问是否启用DST,但答案只说明当前日期/时间是否在DST规则内,因此应该对其进行调整,但操作系统的设置要求将时间保持在标准时区。

如何从C#中获得“夏时制自动调节时钟”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-16 03:50:36

如果您只想知道本地时区是否支持DST,请使用:

代码语言:javascript
复制
bool hasDST = TimeZoneInfo.Local.SupportsDaylightSavingTime;

这在以下两种情况中都是错误的:

  • 所选时区不使用DST (如亚利桑那州和夏威夷)
  • 所选时区使用DST,但用户已清除“自动调整时钟以节省日光”复选框。

如果您特别想知道用户是否为通常支持DST的时区禁用了DST,请执行以下操作:

代码语言:javascript
复制
bool actuallyHasDST = TimeZoneInfo.Local.SupportsDaylightSavingTime;
bool usuallyHasDST = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id)
                                 .SupportsDaylightSavingTime;
bool dstDisabled = usuallyHasDST && !actuallyHasDST;

只有当用户专门清除了“自动调整时钟用于夏令时”复选框时,dstDisabled变量才会为真。如果该框不存在,因为该区域一开始不支持DST,那么dstDisabled将为false。

这是怎么工作的?

  • Windows将选定的时区设置存储在注册表中: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
  • 当清除框时,DynamicDaylightTimeDisabled键被设置为1。否则,它将设置为0https://stackoverflow.com/a/9946398/634824专门检查了这个值,这也是一个可接受的解决方案。
  • 调用TimeZoneInfo.Local会考虑到该键中的所有信息。
  • Id查找时区时不考虑注册表中的任何信息,只考虑存储在TimeZoneKeyName值中的Id本身。
  • 通过将注册表创建的信息与查找信息进行比较,可以确定DST是否已被禁用。

请注意,TimeZoneInfo.Local的备注部分也很好地描述了这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25273281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档