2011-05-17 55 views
1

我有一個asp.net + c#應用程序使用System.DateTime.now記錄員工的工作時間。該應用程序在線,最近我有用戶從我的國家以外連接到它。使用不同的時區

我有一個希望他的員工在國外工作,根據他們的時區記錄他們的工作時間的客戶端。

所有的日期和時間是在該數據庫記錄不是萬能時間,所以我不想嘗試和向後改變一切,以UTC(我也認爲這是不適用)。

我知道如何檢測用戶的時區 - js和地理位置。事情是我不相信兩者的準確性水平。最後,我想我會讓管理員通過界面定義時區,用戶將選擇他想使用的那個。

這是一個正確的方法嗎?最佳做法是什麼? 10q非常多。

+0

相關問題:http://stackoverflow.com/q/2532729/1583 – Oded 2011-05-17 08:36:32

回答

0

我覺得你有一個管理員定義的時區爲一組用戶的方法使得有很大的意義。您經常會發現人們在臺式電腦上定義了錯誤的時區,這增加了另一個複雜因素。如果你明確地設置它,你是安全的。

我會敦促你在你的數據庫中使用UTC。如果你開始在同一個數據庫中混合使用來自不同時區的日期時間,這將會回來咬你!

0

以UTC存儲DateTimes絕對是我書中的最佳實踐。轉換現有數據可能有相當多的工作量,但如果在不同的時區已經有一些用戶,那麼從長遠來看它可能是值得的(今天是兩個,但很快它可能會是三,四....)這也會讓避免夏令時轉換等問題變得更容易,尤其是在夏令時開始和結束時間不同的地區(尤其是美國和英國之間的情況)時。 (我必須在我的系統中處理這些DateTime問題)。

時輸入到您的UI數據我不會依賴於用戶的時區中的任何自動檢測。我要做的第一件事是將數據庫中的用戶與時區屬性相關聯。這聽起來不像你的用戶改變他們的時區很多,如果有的話。

應該不會太難關聯與用戶的用戶或組,如果你不是已經在做了位置。只需添加時區信息及其位置,並在從您的輸入創建DateTime對象時在代碼中使用它。它意味着有人需要管理更多的數據,但與試圖通過代碼自動檢測時區相比,它不會那麼麻煩。

這將是很容易錯過的轉換,現在你要添加一個新的時區。我會建議確保你所有的DateTime邏輯是集中的(擴展方法或輔助類,這取決於你的框架版本)。將所有轉換和字符串格式保存在一個地方,並確保所有代碼都引用它。

祝你好運,並寫下你的轉換周圍的單元測試。