2009-11-24 41 views
1

我正在使用我的應用程序開始嘗試啓用utc支持。Asp.net MVC Overiding LINQ to SQL的缺省getter和setter用於執行UTC轉換

我已經完成了所有工作,並且自己寫了兩個實用程序類,分別稱爲convertToUtc和convertFromUtc。我想你可以猜到他們做了什麼。

我在想什麼,我可以在linq-to-sql創建的對象模型中將它們構建到getter和setter方法中,或者我應該繞着應用程序到處重新分配值保存(添加一個額外的行控制器像

task.taskDeadline = Utility.ConvertToUtc(aspnet_Repository.GetUserGuid(User.Identity.Name), task.taskDeadline.Value); 

如果有人可以告訴我,我做的事情由我每次需要用戶的Guid要回分貝太可怕了,這將是很酷。我猜下來這條線我將緩存它,但這需要在會議或其他事情我想。

謝謝大家。

+0

即使在這種情況下它不是一個好的解決方案,最好是知道linq-to-sql是否可能。 – 2009-11-24 00:15:03

+0

我認爲在這種情況下,最好是在時間上或從utc上移動對象的方法,因爲這樣可以使代碼變得簡單,但使我能夠隨時獲得所需的時間。 – 2009-11-24 00:32:15

回答

1

您應該始終將日期時間存儲在數據庫中作爲UTC值(如果您知道對象的真實UTC時間)並且永遠不會將本地時間值存儲在數據庫中。

從UTC時間到本地時間的轉換主要是一個渲染問題,應該在您的UI層中處理。

此後一條規則的一個例外是,當您嘗試按用戶的日期時間進行GROUP(例如,昨天或上個月發生了什麼),在這種情況下,UI需要將時區向下傳遞到業務層,甚至可能到數據庫,以執行由日期時間的本地表示分組的有效查詢。

+0

您可以通過將用戶時區與用戶存儲爲GMT的偏移量(即-12到+13之間的數字)來處理您的異常情況。每次登錄時都更新用戶時區(如果其網頁應用程序易於使用JavaScript)。 – Neal 2009-12-21 20:20:59

+0

是的,您需要將UI的時區傳遞到業務層(如我所述),但它不是一個整數:時區可以是十進制值。此外,嚴格來說,您需要全面的時區信息,而不僅僅是偏移量,以便能夠在DST發生變化的一年中正確分組(大多數人不這樣做是因爲它非常困難)。 – 2009-12-24 05:55:22