2012-05-19 9 views
19

Wie überprüft man, ob in Dänemark die Sommerzeit eingespart wurde, wenn ja, dann addiere ich 1 Stunde zu meinen Daten, sonst nicht? Ich habe eine XML-Datei:Prüfen, ob Sommerzeit in Kraft ist?

<day = "1" 
month = "5" 
sunrise ="06:30" 
sunset ="21:30" 
/> 

Antwort

44

Denken Sie diese xml Datetime müssen konvertieren können und dann Timezone Klasse.

Wenn Dänemark Ihre Ortszeit:

DateTime thisTime = DateTime.Now; 
bool isDaylight = TimeZoneInfo.Local.IsDaylightSavingTime(thisTime); 

sonst noch brauchen Dänemark Time-Zone zu erhalten:

DateTime thisTime = DateTime.Now; 
// get Denmark Standard Time zone - not sure about that 
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Denmark Standard Time"); 
bool isDaylight = tst.IsDaylightSavingTime(thisTime); 
+0

Warum diese "Südamerika Standard Time E." für spezifische 'neue Datetime mit gut funktionieren does (1995, 10, 15)' date? Sie können es hier nicht testen https://dotnetfiddle.net/ilwIZu und in Dokumentationsgeschichte auf https://pt.m.wikipedia.org/wiki/Lista_de_períodos_em_que_vigorou_o_horário_de_verão_no_Brasil 1995-10-15 ist wirklich ein Tag Licht –

4

Sie TimeZoneInfo.IsDaylightSavingTime

DateTime theDate = new DateTime(2012, 5, 1); // may 1st 
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate); 
6

Wenn ich codiert, wie oben - für New York, fand ich im Debugger, dass die Uhrzeit wurde richtig eingestellt (inkl. DST)

+0

Was ist ' GetLocalDateTime'? – Kiquenet

+0

Entschuldigung, ich habe vergessen, die Methode zu kopieren. Herausgegeben über –

0

Hier ist ein generischer Test und gerne korrigiert, wenn meine Mathe ist falsch. In meinem Fall brauchte ich nur den GMT-Offset für die Zeitzone, egal wo auf der Welt es war.

Ich fand einfach die aktuelle Zeit und wenn es in Day Light Savings Zeitraum war fügte +1 zum GMT-Offset hinzu.

Dies funktioniert mit Visual Studio Express 2013

0

Sie müssen zwei Dinge tun:

  1. Anruf IsAmbiguous
  2. Liste item IsDaylightSavingTime.

if (TimeZoneInfo.Local.IsAmbiguousTime(unclearDate) || TimeZoneInfo.Local.IsDaylightSavingTime(unclearDate)) Console.WriteLine("{0} may be daylight saving time in {1}.", unclearDate, TimeZoneInfo.Local.DisplayName);

https://msdn.microsoft.com/en-us/library/bb460642(v=vs.110).aspx

+0

Was ist 'IsAmbiguous'? – Kiquenet