检测当前是不是启用 DST

Posted

技术标签:

【中文标题】检测当前是不是启用 DST【英文标题】:Detect if the DST is currently enabled检测当前是否启用 DST 【发布时间】:2012-04-13 20:12:18 【问题描述】:

我需要找到一种简单的方法来了解本地计算机的“自动调整夏令时时钟”选项是否已启用。 如果该选项打开,我需要知道它当前是否已应用(即系统中当前是否为 DST)。 提前致谢

【问题讨论】:

【参考方案1】:

您可以像这样(.NET 3.5 以上)找到当前系统默认时区以及当前是否使用 DST(夏令时):

TimeZoneInfo zone = TimeZoneInfo.Local;
if (zone.SupportsDaylightSavingTime)

    Console.WriteLine("System default zone uses DST...");
    Console.WriteLine("In DST? 0", zone.IsDaylightSavingTime(DateTime.UtcNow));       

else

    Console.WriteLine("System default zone does not use DST.");

【讨论】:

使用 DateTime.IsDaylightSavingTime 怎么样? @hamad:天哪,我从来没见过。我个人不会使用它,因为 a) 它没有告诉你当前时区是否支持 DST; b)您实际上是在问一个在逻辑上与特定时间点的时区有关的问题-使用我在IMO提供的那种代码要灵活得多; c) 它没有使用DateTime 的可怕的“让我们隐式地使用系统默认时区”方面。我不是DateTime的粉丝,出于各种原因...【参考方案2】:

另一个选项可能是DateTime.IsDaylightSavingTime 方法。检查MSDN。

if (DateTime.Now.IsDaylightSavingTime())
    Console.WriteLine("Daylight Saving");
else
    Console.WriteLine("No Daylight Saving");

【讨论】:

【参考方案3】:

您可以读取注册表以确定复选框是否被选中。 读这把钥匙,

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation DynamicDaylightTimeDisabled

= 0 或 1(禁用)

类似:

    Dim retval As Object = Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation", "DynamicDaylightTimeDisabled", 0)
    If retval IsNot Nothing Then
        Select Case CInt(retval)
            Case 0
                Trace.WriteLine("Automatically adjust clock for Daylight Saving Time is checked")
            Case 1
                Trace.WriteLine("Automatically adjust clock for Daylight Saving Time is NOT checked")
        End Select
    End If

【讨论】:

这告诉复选框是否启用,但不告诉 DST 当前是否有效。 也许这就是我们中的一些人想要的。我正在运行一个包含 utc 日期的报告,如果我不知道该复选框的状态并考虑它,timezoneinfo 将始终根据它被检查来转换。【参考方案4】:

这是另一个 C# 示例

private static bool IsDayLightSavingsEnabled()

  try
  
    var result = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation", "DynamicDaylightTimeDisabled", 1);
    return !Convert.ToBoolean(result); //0 - Checked/enabled,  1 - Unchecked/disabled
  
  catch
   
  return false;

【讨论】:

以上是关于检测当前是不是启用 DST的主要内容,如果未能解决你的问题,请参考以下文章

如何检测是不是启用了防火墙产品?

如何检测是不是启用了屏幕自动锁定

如何检测是不是启用了 PHP JIT

检测用户是不是在域上启用了位置服务

如何检测用户是不是启用了密码或 PIN?

从 PHP 脚本检测是不是启用了 mbstring