2010-10-07 18 views
8

Quiero calcular la diferencia horaria actual entre US/Central timezone y British Summer Time. Quiero decir, actualmente estas dos zonas horarias tienen un horario de verano, por lo que tienen una diferencia horaria de 6 horas. Pero después del domingo 31 de octubre de 2010, el horario de verano estará desactivado para el horario de verano británico, momento en el cual habrá una diferencia horaria de 5 horas entre estas dos zonas horarias.Cómo obtener las diferencias horarias actuales entre dos zonas horarias

¿Hay alguna manera en que pueda calcular estas diferencias de tiempo variables?

+0

Posible duplicado de [Creación de un DateTime en un huso horario específico en C# fx 3.5] (https://stackoverflow.com/questions/246498/creating-a-datetime-in-a-specific-time-zone-inc-c- sharp-fx-3-5) – Liam

Respuesta

4

Puede crear dos objetos de fecha y hora de diferentes zonas horarias, un buen ejemplo: Creating a DateTime in a specific Time Zone in c# fx 3.5

y calcular el delta entre ellos.

+0

Aunque no he usado ese método exacto, pero de sus respuestas obtuve la idea básica. Implementé esa solución y es casi un 90% similar a la respuesta de Jon Skeet. Pero como tu respuesta me dio la idea, la estoy seleccionando como la respuesta elegida. Muchas gracias :-) –

2

Am tiene la respuesta correcta que funcionará principalmente si se limita a la fecha actual. En general, dependiendo de qué tan correcto sea, puede ser bastante difícil. Esto se debe a que el horario de verano en una zona horaria a partir de hoy puede ser diferente de lo que era en la historia. Quizás antes del 01/04/1950 no hubo horario de verano británico. O durante los Juegos Olímpicos de Sydney, las fechas de horario de verano se cambiaron temporalmente en el año 2000. Para tener en cuenta todas estas cosas, necesitará una base de datos histórica de DST/TimeZone.

+0

No, no necesito la base de datos histórica DST/TimeZone, he calculado las diferencias de tiempo en estas dos áreas y luego la he utilizado para la conversión necesaria, pero gracias por su respuesta. –

2

La documentación para TimeZoneInfo.GetUtcOffset tiene un ejemplo que muestra el cálculo del desplazamiento UTC para varias zonas horarias en diferentes momentos. Solo necesita obtener el desplazamiento UTC en el momento específico de interés para cada una de sus dos zonas horarias y calcular la diferencia. Ver:

http://msdn.microsoft.com/en-us/library/bb396378.aspx

21

sólo para proporcionar un código concreto para las respuestas dadas, aquí hay un código para calcular la diferencia de corriente entre yo (en Londres) y mis colegas en Mountain View:

using System; 

class Test 
{ 
    static void Main() 
    { 
     var london = TimeZoneInfo.FindSystemTimeZoneById 
      ("GMT Standard Time"); 
     var googleplex = TimeZoneInfo.FindSystemTimeZoneById 
      ("Pacific Standard Time"); 

     var now = DateTimeOffset.UtcNow; 
     TimeSpan londonOffset = london.GetUtcOffset(now); 
     TimeSpan googleplexOffset = googleplex.GetUtcOffset(now); 
     TimeSpan difference = londonOffset - googleplexOffset;   
     Console.WriteLine(difference); 
    } 
} 
+0

excepto que Mountain View no está en la hora estándar de la montaña de EE. UU .:-) – Andrew

+0

@Andrew: ¿No es así? Este es el problema con los identificadores de Windows en lugar de los nombres de zoneinfo :(¿Cuál es el ID correcto en este caso? ¿Simplemente "Mountain Standard Time" u "Pacific Standard Time"? Editando a este último ... –

+0

lo siento, debería haber sido más explícito en mi comentario. Creo que debería ser Pacific Standard Time. – Andrew

Cuestiones relacionadas