2011-08-31 50 views
1

我正在研究.Net Compact Frmework(CF)應用程序。我這個應用程序的要求是,我應該能夠改變時區。但是,當我更改時區時,當前時間不會更改爲特定的時區。從,網絡我來知道,DateTime.Now不能在這種情況下工作。更改TimeZone並不反映.NET Compact Framework中的時間更改

我使用以下贏API:

  1. SetTimeZoneInformation(...) - 設置時區的運行。
  2. GetLocalTime(...) - 獲取當地時間w.r.t當前時間 區域。

有人可以告訴我什麼可能是錯的?

回答

5

以這種方式從應用程序更改時區而不是更改本地時間:改爲更改系統時間以保持本地時間相同。這不是在控制面板做什麼,但如果你想效仿的控制面板功能,你需要做這樣的事情:

  • 保存系統時間
  • 更改時區
  • 恢復保存系統時間

這樣,系統時間保持不變,本地時間根據所選時區而變化。

順便說一下,我們在使用OpenNETCF庫(http://www.opennetcf.com),其中包括DateTimeHelper類(許多其他有用的東西 - 社區版是免費的)之一的產品中執行此操作。 (這只是一個小的整潔,而不是編寫自己的pinvoke訪問SetTimeZoneInformation(),功能是一樣的。)

2

這是設計,它避免了代碼依賴於心臟病發作持續增加的時鐘。解決方法是在更改時區後顯式調用CultureInfo.CurrentCulture.ClearCachedData()。或重新啓動應用程序。

+0

我試圖清除緩存的數據,但最終以失敗告終。 – Omkar

3

我有同樣的問題。在我的情況下,改變時區而不改變時間,我用這個代碼:

DateTime dateTime = DateTime.Now; 
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
TimeSpan currentOffset = timeZone.BaseUtcOffset.Duration(); 
DateTimeOffset offset = new DateTimeOffset(dateTime, currentOffset); 

我有GMT + 2時區。例如11/7/2012 14:00 +02:00。

使用此密碼後,我同時有GMT + 1。 11/7/2012 14:00 +01:00。