2012-03-30 15 views
4

Ich muss einen einfachen Weg finden, um zu wissen, ob die Option "Automatische Anpassung der Uhr für die Sommerzeit" des lokalen Geräts aktiviert ist. Wenn die Option aktiviert ist, muss ich wissen, ob sie aktuell angewendet wird (d. H. Ob sich die Sommerzeit momentan im System befindet). Vielen Dank im VorausErmitteln, ob die Sommerzeit derzeit aktiviert ist

Antwort

7

Sie können die aktuelle Systemstandardzeitzone finden und ob sie aktuell DST (Sommerzeit) wird mit so (.NET 3.5 aufwärts):

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."); 
} 
+0

Wie wäre es mit DateTime.IsDaylightSavingTime? – ABH

+1

@hamad: Meine Güte, das hätte ich nie gesehen. Persönlich würde ich * es nicht benutzen, weil a) es dir nicht sagt, ob die aktuelle Zeitzone sogar DST unterstützt; b) Sie stellen wirklich eine Frage, die logischerweise eine Zeitzone zu einem bestimmten Zeitpunkt betrifft - es ist viel flexibler, die Art von Code zu verwenden, den ich IMO vorgestellt habe; c) Es benutzt nicht den grässlichen "lasst uns einfach die System-Standardzeitzone implizit verwenden" -Aspekt von "DateTime". Ich bin kein Fan von 'DateTime', aus verschiedenen Gründen ... –

1

Eine weitere Option sein kann, ist DateTime.IsDaylightSavingTime Methode. Überprüfen Sie MSDN.

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

Sie können die Registrierung lesen, um festzustellen, ob das Kontrollkästchen aktiviert ist oder nicht. Lesen Sie diesen Schlüssel,

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Timezone

DynamicDaylightTimeDisabled

= 0 oder 1 (deaktiviert)

So etwas wie:

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 
+0

Dies zeigt an, ob das Kontrollkästchen aktiviert ist, aber nicht, ob DST momentan aktiv ist. –

1

Hier ist ein weiteres Beispiel in 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; 
} 
Verwandte Themen