【发布时间】:2012-04-13 20:12:18
【问题描述】:
我需要找到一种简单的方法来了解本地计算机的“自动调整夏令时时钟”选项是否已启用。 如果该选项打开,我需要知道它当前是否已应用(即系统中当前是否为 DST)。 提前致谢
【问题讨论】:
标签: c# .net vb.net timezone dst
我需要找到一种简单的方法来了解本地计算机的“自动调整夏令时时钟”选项是否已启用。 如果该选项打开,我需要知道它当前是否已应用(即系统中当前是否为 DST)。 提前致谢
【问题讨论】:
标签: c# .net vb.net timezone dst
您可以像这样(.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 的可怕的“让我们隐式地使用系统默认时区”方面。我不是DateTime的粉丝,出于各种原因...
另一个选项可能是DateTime.IsDaylightSavingTime 方法。检查MSDN。
if (DateTime.Now.IsDaylightSavingTime())
Console.WriteLine("Daylight Saving");
else
Console.WriteLine("No Daylight Saving");
【讨论】:
您可以读取注册表以确定复选框是否被选中。 读这把钥匙,
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
【讨论】:
这是另一个 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;
}
【讨论】: