2013-03-28 8 views
6

Ich habe Prozess, der Datetime-Wert mit Zeitzone als String akzeptiert (Daten kommt von außerhalb System). Ich muss diese Datetime in die Zeitzone der lokalen Maschinen umrechnen.Konvertieren von Zeit aus verschiedenen Zeitzone mit Sommerzeit Einsparungen enthalten

Beispielcode:

string cetId = "Central European Standard Time"; 
if (timeZone == "CET") 
{ 
    TimeZoneInfo cetZone = TimeZoneInfo.FindSystemTimeZoneById(cetId); 
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cetZone, TimeZoneInfo.Local); 
} 
else if (timeZone == "CEST") 
{ 
    TimeZoneInfo cestZone = TimeZoneInfo.FindSystemTimeZoneById(cetId); 
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cestZone, TimeZoneInfo.Local); 
} 

Muß ich bestimmt, etwas tun, wenn die Zeit MESZ (Mitteleuropäische Sommerzeit) ist statt MEZ (Mitteleuropäische Zeit) oder nicht .net Timezone Objekt, das Szenario umgehen?

Antwort

1

Sie sollten in Ordnung sein.

Sie sagen ConvertTime was beide Zeitzonen (Quelle und Ziel) sind.

Haben Sie ein spezifisches Problem oder fragen Sie nur nach Bestätigung?

+0

ich nur besorgt war, dass die Sommerzeit an verschiedenen Tagen tritt je nach Zeitzone und Ich war besorgt, dass die Zeiten nicht richtig übersetzt würden – Tadhg

0

Von TimeZoneInfo.ConvertTime()

The value of the Kind property of the dateTime parameter must correspond to the sourceTimeZone parameter, as the following table shows. 

möchte nur hinzufügen, dass Sie für das ‚Kind‘ Eigentum Ihrer StatusDateTime achten müssen. In Ihrem Fall muss es "nicht spezifiziert" sein. Schauen Sie sich die ‚Bemerkungen‘ Abschnitt

0

Ich habe eine Bibliothek vor einiger Zeit diese Art von Transformationen zu kapseln:

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/UtcTimeZone.cs

könnte für Sie nützlich sein, oder möchten Sie vielleicht nur um es holen über Überprüfen Sie Ihren Code. Eines der Dinge, die es einkapselt, ist @ Brians Vorbehalt - es hat also explizite Methodennamen, die sich auf die .Kind -Eigenschaft beziehen und nützliche Ausnahmen auslösen, wenn der .Kind falsch ist. Es braucht auch ein wenig von der Routinearbeit bewährt/common/Sommerzeit Namen und Abkürzungen zu bekommen:

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/TimeZoneShortNameMap.cs

Verwandte Themen