我正在研究需要每天運行24H的應用程序,並且正在努力正確實施對DST的支持。所有時間都以UTC格式保存,但當我嘗試在當地時間顯示時遇到問題。現在我使用savedDate.ToLocalTime()
從DB值轉換爲本地時間進行顯示。這似乎工作正常,除了當我更改時區信息以嘗試測試DST時。如果我在客戶端PC上修改時區,則顯示不會隨新時區更新。有沒有更好的方法來測試DST,還是我的轉換爲本地時間對於這種情況不正確?在24H應用程序中處理DST
回答
我記得讀,或許對於Compact Framework的,有關.NET不是最可靠的,當談到關於DST報告。更可靠的是獲取當地時間和UTC的當前時間,然後確定(並在將來的調整中使用)自己的差異。如果沒有必要,這似乎是一條可怕的路線。我會看看如果我能找到一個參考備份我記得我認爲。
你在做什麼,確切地說,是改變工作站上的時區?
我正在更改我的系統時鐘從東部時間到大西洋時間的時區。這是爲了通過保持我的本地盒子的UTC時間相同來測試DST,但它具有當地時間變化。 – 2009-06-05 19:50:59
嗯。你預計實際上必須改變時區,而應用程序正在運行?如果框架在第一次獲取後緩存它,我不會感到驚訝。
我會在設備上設置時區,改爲「只是更改爲DST之前」,運行應用程序並檢查它正確地報告倍的時間。然後將時間更改爲「剛剛更換DST之前」。
記住,根據您的設備和時區數據庫的年齡,它可能不知道,幾年前在美國改變DST。 (啊,時區,得愛他們)
如果您從數據庫中檢索DateTime值,您通常會得到一個Date屬性設置爲DateTimeKind.Unspecified的DateTime。基本上,因爲我知道的任何特定於數據庫的DateTime類型(例如SqlDateTime)都不包含時區信息。
如果然後嘗試這個本地時間使用savedDate.ToLocalTime()「轉換」,你會得到過去存儲,無需任何轉換相同的日期時間值。
你需要做的是表明,所保存的日期是UTC執行轉換之前,是這樣的:
DateTime savedDateTime = (DateTime) reader["SomeDateTimeColumn"];
// Convert from unspecified to UTC
DateTime utcDateTime = savedDateTime.SpecifyKind(savedDateTime, DateTimeKind.Utc);
...
// Convert from UTC to local
DateTime localDateTime = utcDateTime.ToLocalTime();
我發現一些的.Net CF 2.0版本不正確地之間做翻譯時間UTC和當地時間。這些問題圍繞着幾年前發生在美國時區的變化。
的症狀是DST似乎不被視爲生效,直到四月(舊規則),而不是三月(新規則)。據推測,DST變更的後端(10月/ 11月)也存在問題。
到目前爲止,我還沒有找到有關可能是翻譯正確工作所需的最小構建的信息。
注意這不是通過應用操作系統DST修復(其,很明顯,也應該被安裝)固定。據我所知,它完全是CF的內在特徵。我沒有嘗試過所有的組合,但要小心。
如果你想在CF準確的翻譯,你只有兩種選擇:
自己做轉換(非常複雜的,剛性的,且容易出錯)。
確保您在設備上有必要的.Net和OS補丁,以便翻譯準確。
你也許能夠找到一個適合你的類庫。一個很有前途的課程是World Clock/Code Project),但不幸的是它依賴於CF中不可用的註冊表信息。因此,它不能直接移植到CF上。
然後最後,任何自己的解決方案都需要提供時區信息(UTC偏移,DST開/關日期等)。並在任何時候都準確。
對不起,這個壞消息。
- 1. 在iPhone應用程序中處理Cookie
- 2. 在Eclipse中處理android應用程序
- 3. 處理AIR應用程序
- 4. 處理lite應用程序
- 5. 處理應用程序:willChangeStatusBarFrame:
- 6. 在應用程序結算 - 處理IN_APP_NOTIFY
- 7. 與Web應用程序在Python處理
- 8. Swift應用程序中的預處理
- 9. 使用不同的線程在web應用程序中處理
- 10. 在主線程中處理wpf應用程序中的呼叫
- 11. 從iphone應用程序的信用卡處理應用程序
- 12. 在ios應用程序中處理理想的超時時間
- 13. 在Tornado應用程序中優雅地處理應用程序異常
- 14. 在中斷處理程序
- 15. Spring Boot Undertow在同一應用程序中添加阻塞處理程序和NIO處理程序
- 16. 在上游通道處理程序中應用線程池
- 17. SQLAlchemy在多線程應用程序中正確處理會話
- 18. 事件在Java中使用通用處理程序處理
- 19. branch.initSessionWithLaunchOptions處理程序在應用程序退出時觸發
- 20. ProgressBar與Android應用程序中的處理程序倒計時
- 21. 如何從應用程序中刪除事件處理程序?
- 22. 從另一個應用程序中的活動處理程序?
- 23. Web應用程序中的處理程序
- 24. C#方法TimeZoneInfo.ConvertTime處理DST嗎?
- 25. 處理應用程序重新設計
- 26. WPF應用程序錯誤處理
- 27. 同時處理應用程序和庫?
- 28. Java Web應用程序內存處理
- 29. Saas應用程序的支付處理
- 30. Android - 應用程序最小化處理
我想我可能會在下面的答案中產生混淆。這是精簡版框架,還是不是?雖然我們在這裏,你使用的是什麼版本的.NET Framework? – lance 2009-06-05 19:44:09
我使用的是.NET 2.0,而不是Compact Framework。 – 2009-06-05 19:47:38