2012-04-04 23 views
8

¿Hay un TimeZoneInfo genérico para Europa Central que tenga en cuenta tanto CET como CEST en uno?¿Existe un TimeZoneInfo genérico para Europa Central?

Tengo una aplicación que está haciendo lo siguiente:

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

El problema es que esto está devolviendo el UTCDate equivocada porque el BaseUtcOffset es 1 en lugar de 2. Parece que CET tiene DST también y, dependiendo de la época del año, es +1 o +2.

Respuesta

5

En primer lugar, me gustaría aplaudir la respuesta de mgnoonan de utilizar Noda tiempo :) Pero si se siente menos aventurero ...

Ya estás usando el huso horario correcto - pero no debe estar usando BaseUtcOffset cuales es documentados no estar sobre el horario de verano:

Obtiene la diferencia de tiempo entre la hora estándar de la zona horaria actual y el tiempo universal coordinado (UTC).

No es posible que tome en consideración el horario de verano cuando no se está proporcionando un DateTime a buscar la compensación para :)

Suponiendo someDate es una DateTime, se puede utilizar:

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

O simplemente ConvertTimeToUtc:

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

Nota que debe resolver lo que quiere hacer si su hora local se produce dos veces debido a una transición DST, o no ocurre en absoluto.

+0

Sabía que debería haber esperado su respuesta. ;) – mgnoonan

+0

Gran explicación. Aunque Noda Time podría ser la herramienta adecuada, esto funcionó y es la mejor solución para el proyecto actual. –

+0

Sólo un comentario menor: ConvertTimeToUtc es ahora un método estático, por lo que debe llamar al var utcDate = TimeZoneInfo.ConvertTimeToUtc (someDate, tzi) – Eoin

4

¿Quizás Noda Time puede ayudarlo?

+0

Definitivamente tomará Noda Time la próxima vez que use las fechas. ¡Gracias! –

Cuestiones relacionadas