2013-02-21 53 views
0

我正在使用ASP.NET 3.5和SQL Server 2008編寫日曆網站,並希望以最佳方式處理時區。我讀過這些來源:在ASP.NET中創建日曆應用程序,處理時區

Daylight saving time and time zone best practices

http://noda-time.blogspot.com/

http://msdn.microsoft.com/en-us/library/ms973825.aspx

我已經得到了所有的一般信息,但有一個艱難的時間將其轉換爲實際的代碼。不尋找某人爲我編寫代碼,但是如果我知道其他人爲這個特定情況做了什麼(日曆應用程序,事件的日期/時間,因爲「東部時間下午5點」始終應該是「東部下午5點」規則改變)。

您是否使用.NET DateTimeOffset和TimeZoneInfo類?我沒有看到他們支持像「使用2011年1月2日發佈的規則將此UTC時間轉換爲EST」這樣的內容,我認爲這是您需要創建一個「正確」處理時區的日曆應用程序所需的控制級別。我也不認爲每個人都在使用野田時間,因爲我幾乎找不到有關該圖書館的任何示例或討論。 Java版本可能被大量使用,但很多應用程序都是用.NET編寫的,那麼他們在做什麼?

回答

0

不是真的認爲這是正確的答案,但認爲最好是發表一個答案 - 這是錯誤的機會,這是正確的,也只是因爲它更容易閱讀/遵循這種方式。

請讓我知道如果我前往正確的方向:

  1. 使用的DateTimeOffset和的TimeZoneInfo類

  2. 在數據庫中保存的DateTimeOffset值和偏移量。還保存TimeZoneInfo.id(tz id)。

  3. 在使用數據庫中的值之前,始終將保存的偏移量與當前的TimeZoneInfo偏移量進行比較,並根據差異調整DateTimeOffset值。這就是修正「政府改變規則」的問題,並將「東部時間下午4點」的時間保留爲「東部時間下午4點」(即使由於新規則而導致UTC的偏移量已發生變化)。

  4. 爲了使尋找特定日期/時間或範圍的查詢工作,只要規則發生變化(通過govt),請通過並「修復」數據庫中的每條記錄。修復與上面#3使用的步驟相同,但在修復後保存新值。

這是別人在做什麼? #4並不是真正的瘋狂,因爲我需要在Windows更新與新規則一起應用的同時做到這一點......任何時候在Windows更新和我的數據庫更新完成之間,它都可能產生無效的查詢結果。我想這就是「定期維護」的目的,但我們目前沒有這樣嚴格的政策。

相關問題