检测当前是否启用了夏令时

4

我需要找到一种简单的方法来确定本地机器的“自动调整夏令时钟表”选项是否已启用。

如果该选项已经打开,我需要知道它当前是否应用(即系统是否处于夏令时状态)。

谢谢。

4个回答

8
您可以像这样找到当前系统默认的时区以及它是否正在使用夏令时(Daylight Saving Time)(.NET 3.5或更高版本):
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怎么样? - ABH
2
@hamad:天啊,我甚至从未见过这个。就我个人而言,我不会使用它,因为a)它并没有告诉你当前时区是否支持夏令时;b)你实际上是在询问一个关于特定时间点的时区逻辑问题——使用我提供的代码更加灵活;c)它没有使用DateTime可怕的“让我们隐式地使用系统默认时区”的方面。出于各种原因,我不是DateTime的粉丝... - Jon Skeet

2

以下是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;
}

2

另一个选择可能是使用DateTime.IsDaylightSavingTime方法。请查看MSDN

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

2
您可以读取注册表来确定复选框是否被选中。 读取以下键值:

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。 - Moby Disk
也许这正是我们中的一些人想要的。我正在运行一个充满UTC日期的报告,如果我不知道复选框的状态并加以考虑,TimeZoneInfo将始终基于其被选中而进行转换。 - John Lord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接