2011-07-17 17 views
6

Necesito poder saber cuál es la compensación de zona horaria para el dispositivo que ejecuta mi aplicación en minutos. Por ejemplo, para la hora estándar del Pacífico (donde estoy probando), necesito obtener el int -480. Ejemplos (que no podría obtener de mi ubicación actual, pero para darle una idea de lo que necesito) en Afganistán obtendría 270 y el Reino Unido es donde obtendría 0.¿Cómo obtengo el desplazamiento de la zona horaria en minutos en WP7?

Mis mejores intentos para todo momento han regresado 0 en su lugar, que es el valor incorrecto:

int timezoneOffsetInMinutes = (DateTime.Now.ToLocalTime() - DateTime.Now).Minutes// returns 0 instead of the expected -480 

y

int timezoneOffsetInMinutes = TimeZoneInfo.Utc.BaseUtcOffset.Minutes - TimeZoneInfo.Local.BaseUtcOffset.Minutes;// also returns 0, not -480 

no estaba segura de si this post estaba pidiendo la misma pregunta (como se indica ningún código de ejemplo compensaciones o ejemplo), pero la única respuesta que se da allí definitivamente no está relacionada con wha Estoy buscando.

Respuesta

5

Si desea que el base/norma offset, a continuación, TimeZoneInfo es probablemente la forma más correcta de acceder a esta información (y también le da acceso a otra información, como por ejemplo si la zona horaria es compatible con el horario de verano):

TimeSpan offset = TimeZoneInfo.Local.BaseUtcOffset; 

Sin embargo, si desea que el actual offset (incluyendo cambios de DST), me gustaría conseguir en el hábito de usar DateTimeOffset, ya que básicamente ha reemplazado DateTime (que es capaz de representar una hora "local" a una zona horaria eso es diferente a la máquina local):

TimeSpan offset = DateTimeOffset.Now.Offet; 
2
DateTime utc = DateTime.Now.ToUniversalTime(); 
DateTime local = DateTime.Now; 
TimeSpan diff = (utc - local); 

Esto devuelve la diferencia de tiempo correcta entre usted y UTC.

+0

Esto es progreso: obtengo el valor 56 (no 0, por primera vez). ¿Qué es lo que no entiendo acerca de UTC que no estoy obteniendo lo que espero? Mi dispositivo y el emulador están configurados para PST y ambos obtienen los mismos valores – Subcreation

+0

Ok, veo que lo que necesitaba era diff.TotalMinutes (en lugar de solo diff.Minutes). Todavía obtengo un valor de descuento (-419.999999 en lugar de los -480 que esperaba). Si alguien puede decirme qué está pasando aquí, lo agradecería. Realmente no tiene sentido tener una compensación de zona horaria que no coincida con lo que se muestra en el reloj, es decir, nadie en la costa oeste tiene un reloj configurado a 6.99 horas por detrás de la hora de Greenwich. Tal vez este es un producto del horario de verano? – Subcreation

Cuestiones relacionadas