2011-09-21 41 views
7

我已經寫了這個簡單的控制檯應用程序來測試當我們在Windows 7上使用設置日期時間窗口手動更改時區時,無論timechange事件是否被觸發?答案是肯定的它觸發,但我印這是無法正確顯示當前時間..SystemEvent.TimeChange顯示同一時間甚至時區更改

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); 
    } 

一旦運行控制檯應用程序,然後試圖改變它處處體現一個時間更改時區,但後來不知何故堅持即使您將時區更改爲不同的時區或相同時間。

我錯過了什麼嗎?

以驗證系統時間是否已更改我已打開命令提示符並使用date和'time'命令打印當前時間,該時間根據時區顯示完美。

回答

9

我相信系統時區正在被緩存。您可以清除此緩存雖然:

TimeZoneInfo.ClearCachedData(); 

把那只是你的DateTime.Now調用之前,它看起來像它工作正常。 (作品在我的機器,反正:)

編輯於:正如評論指出,看來在一些箱子你還需要調用CultureInfo.CurrentCulture.ClearCachedData()。我沒有,但我敢說它不傷害這樣做:)

+0

謝謝喬恩。我發現相同的緩存。解決了。 – user393014

+1

另外不要忘記把CultureInfo.CurrentCulture.ClearCachedData(); TimeZoneInfo.ClearCacheData()之前; – user393014

+0

@ user393014:嗯......我不需要那樣做。如果你不在你的機器上這樣做會發生什麼? –

0

愚蠢的問題,但你改變時間,或只是時區? 5:00是5:00,你改變時區(並且通過延長'將電腦'提前或延後一小時或兩小時'移動')不會改變系統時鐘被設置爲5:00的事實。

+0

'DateTime.Now'顯示* local *時間,當您更改時區時,* *會更改。 (系統假定時鐘具有正確的UTC值。) –