检测DST当前是否已启用

时间:2012-03-30 06:22:45

标签: c# .net vb.net timezone dst

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

4 个答案:

答案 0 :(得分:7)

您可以找到当前系统默认时区以及当前是否正在使用DST(夏令时)(.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.");
}

答案 1 :(得分:2)

另一种选择可能是DateTime.IsDaylightSavingTime方法。检查MSDN

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

答案 2 :(得分:1)

您可以阅读注册表以确定是否选中了复选框。 阅读此密钥,

  

HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \控制\ 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

答案 3 :(得分:1)

这是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;
}