2012-04-04 9 views
8

Esiste un TimeZoneInfo generico per l'Europa centrale che prende in considerazione sia CET che CEST in uno?Esiste un TimeZoneInfo generico per l'Europa centrale?

Ho un app che sta facendo quanto segue:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.BaseUtcOffset); 
var utcDate = dto.ToUniversalTime().DateTime; 

Il problema è che questo sta tornando l'UTCDate sbagliato, perché la BaseUtcOffset è uno invece di due. Sembra che CET abbia anche l'ora legale e, a seconda del periodo dell'anno, è +1 o +2.

risposta

5

In primo luogo, vorrei applaudire la risposta di mgnoonan di utilizzare Noda tempo :) Ma se ti senti meno avventurosi ...

Si sta già utilizzando il fuso orario giusto - ma non si deve essere utilizzando BaseUtcOffset quali è documentato di non essere di circa l'ora legale:

Ottiene la differenza di tempo tra l'ora solare del fuso orario corrente e Coordinated Universal Time (UTC).

Non può eventualmente prendere in considerazione l'ora legale quando non sta fornendo un DateTime per andare a prendere l'offset per :)

Supponendo someDate è un DateTime, è possibile utilizzare:

DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate)); 

O semplicemente ConvertTimeToUtc:

var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate, tzi); 

Nota che dovresti capire cosa vuoi fare se l'ora locale si verifica due volte a causa di una transizione all'ora legale o non si verifica affatto.

+0

Sapevo che avrei dovuto aspettare che rispondessi. ;) – mgnoonan

+0

Ottima spiegazione. Anche se Noda Time potrebbe essere lo strumento giusto, questo ha funzionato ed è la soluzione migliore per il progetto attuale. –

+0

Solo un commento secondario: ConvertTimeToUtc è ora un metodo statico quindi è necessario chiamare var utcDate = TimeZoneInfo.ConvertTimeToUtc (someDate, tzi) – Eoin

4

Forse Noda Time può aiutarti?

+0

Prenderò sicuramente in considerazione Noda Time la prossima volta che uso le date. Grazie! –

Problemi correlati