2011-09-21 18 views
7

Ho scritto questa semplice app per console per testare quando cambiamo il fuso orario manualmente su Windows 7 utilizzando la finestra di data ora impostata se l'evento di time change è attivato o no? La risposta è sì si è innescata ma sto stampando ora corrente che non sta mostrando correttamente ..SystemEvent.TimeChange che mostra la stessa modifica di fuso orario anche

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 volta che si esegue console app e quindi provare a cambiare il fuso orario riflette sempre un cambiamento di tempo, ma poi in qualche modo bloccato per quella volta anche se cambi il fuso orario in un fuso orario diverso o uguale.

Mi manca qualcosa?

per verificare se l'ora del sistema è stata modificata o non ho aperto il prompt dei comandi e utilizzare la data e il comando "ora" per stampare l'ora corrente che si mostra perfetta in base al fuso orario.

risposta

9

Credo che il fuso orario del sistema sia stato memorizzato nella cache. È possibile cancellare la cache però:

TimeZoneInfo.ClearCachedData(); 

Metti che poco prima della DateTime.Now chiamata, e sembra che funziona benissimo. (Funziona sulla mia macchina, in ogni caso :)

EDIT: Come notato nei commenti, sembra che in alcuni casi è inoltre necessario chiamare CultureInfo.CurrentCulture.ClearCachedData(). Non l'ho fatto, ma oserei dire che non fa male a farlo :)

+0

Grazie Jon. Ho trovato lo stesso per il cache. Risolto. – user393014

+1

Inoltre, non dimenticare di inserire CultureInfo.CurrentCulture.ClearCachedData(); prima di TimeZoneInfo.ClearCacheData(); – user393014

+0

@ user393014: Hmm ... Non ho avuto bisogno di farlo. Cosa succede se non lo fai sul tuo computer? Il fuso orario –

0

domanda stupida, ma stai cambiando il tempo, o semplicemente il fuso orario? 5:00 alle 5:00, il fatto che sia stato modificato il fuso orario (e per estensione "spostato" il computer un'ora o due avanti o indietro) non cambierà il fatto che l'orologio di sistema è impostato su 5:00.

+0

'DateTime.Now' mostra * ora locale *, che * fa * cambia quando cambi il fuso orario. (Il sistema presuppone che l'orologio abbia il valore UTC corretto). –