2011-09-21 8 views
7

He escrito esta aplicación de consola simple para probar cuando cambiamos la zona horaria manualmente en Windows 7 usando la ventana de fecha y hora configurada si el evento timechange está activado o no. La respuesta es sí desencadenó pero estoy imprimiendo la hora actual que no se muestra correctamente ..SystemEvent.TimeChange mostrando la misma hora, incluso cambios de zona horaria

static void Main(string[] args) 
    { 
     SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged); 
     Console.Read(); 
    } 

    static void SystemEvents_TimeChanged(object sender, EventArgs e) 
    { 
     Console.WriteLine(DateTime.Now); 
    } 

Una vez que ejecute la aplicación de consola y luego tratar de cambiar la zona horaria siempre refleja un cambio de hora, pero luego de alguna manera pegado a ese momento, incluso si cambia la zona horaria a diferentes zonas horarias o lo mismo.

¿Echo de menos algo?

para verificar si la hora del sistema ha cambiado o no, he abierto el símbolo del sistema y uso el comando de fecha y 'hora' para imprimir la hora actual que muestra la información perfecta según la zona horaria.

Respuesta

9

Creo que la zona horaria del sistema está en caché. Puede borrar este caché sin embargo:

TimeZoneInfo.ClearCachedData(); 

poner ese justo antes de su llamada DateTime.Now, y parece que funciona bien. (Funciona en mi máquina, de todos modos :)

EDITAR: Como se señala en los comentarios, parece que en algunos casos también debe llamar al CultureInfo.CurrentCulture.ClearCachedData(). No lo hice, pero me atrevo a decir que no hace daño a hacerlo :)

+0

Gracias Jon. Encontré lo mismo sobre el caché. Resuelto – user393014

+1

Además, no olvide poner CultureInfo.CurrentCulture.ClearCachedData(); antes de TimeZoneInfo.ClearCacheData(); – user393014

+0

@ user393014: Hmm ... No necesitaba hacer eso. ¿Qué pasa si no haces eso en tu máquina? –

0

Pregunta estúpida, pero ¿Está cambiando el tiempo , o simplemente la zona tiempo? 5:00 es 5:00, el hecho de que haya cambiado la zona horaria (y por extensión 'movido' la computadora una o dos horas adelante o atrás) no cambiará el hecho de que el reloj del sistema está configurado a 5:00.

+0

'DateTime.Now' muestra la hora * local *, que * no * cambia cuando cambia la zona horaria. (El sistema supone que el reloj tiene el valor UTC correcto). –

Cuestiones relacionadas