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

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

【问题讨论】:

    标签: c# .net vb.net timezone 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        • 2019-08-31
        相关资源
        最近更新 更多