2010-05-25 118 views
3

我在博客上工作,想在東部時區顯示我的帖子。我認爲存儲一切UTC將是正確的方式。這雖然產生了一些挑戰:將日期時間存儲在數據庫中?

  1. 我必須將所有時間從UTC轉換到東部。這不是一個大問題,但增加了很多代碼。

  2. 與「大款」是我用一個短日期時間通過傳遞查詢,ALA博客引用的帖子。問題是沒有辦法將短日期時間轉換爲正確的UTC日期,因爲我缺少發佈的時間信息。

嗯,任何問題只是存儲在東部時間的所有日期?這肯定會使應用程序的其他部分更加容易,但如果我需要更改時區,則所有內容都將存儲錯誤。

更新

@喬恩,非常看重自己的專業知識,但我已經決定存儲UTC時間在數據庫中是錯誤的。不過,你也許能夠說服我!

所以,讓我給你完整的骨感。我將所有時間轉換爲UTC,這需要在代碼的聲明部分中添加更多「語法」。

什麼我編碼是一個博客,所以我有兩條路線,一個列表路線和細節的路線。細節路線採用短日期,並且假定組合的帖子的名稱是唯一的。這就是它崩潰的原因。我通過查詢中的短路線。

根據一天中的時間,我們能夠圍住,使其爲29或30這樣的短日期必須是正確的,因爲我沒有在查詢足夠的信息來確定如何將東部時間轉換回世界標準時間。

我被存儲DatePosted「短日期」的所有時間@上午12點爲SQL宗旨和FirstModified長日期的時間。所以,我說,好的沒問題,我只會將短日期存儲在東部,然後將長日期轉換爲東部。不行,因爲我無法使這些查詢工作。

所以,我決定對這一切都做錯了。日期應該始終保存在東部時間(我想使用的時間)。然後,如果用戶想要更改時區(不是要求),我們只需瀏覽所有條目並更改它們。

也許,我在想這個毛病,但我的情況下,將永遠只能是用於東部時區,所以這是浪費時間,無論哪種方式。

期待對此有任何意見!

的關鍵問題:

  1. 我傳遞在查詢中的短日期。如果這個短日期是UTC,那麼查詢中的日期可能會被忽略1.如果我將短日期作爲東部通過,那麼我將需要一個linq-to-sql語法,它可以轉換爲SQL,以便我可以比較日期不同時區的時間。再次

感謝所有幫助!

回答

2

這只是一個博客,而不是由世界各地的辦事處使用的企業Web應用程序,所以我說繼續使用東部時間。

如果您曾更改過時區並希望顯示新時區,則一條SQL更新語句可以將所有時間更新到新區域。

5

從UTC到東部時間的轉換時間不應該添加「很多代碼」。它應該幾乎是一個班輪。

我不確定你的第二點意味着什麼 - 如果你詳細說明,這將有所幫助。如果您不知道所涉及的時區,您怎麼才能理解查詢?如果你實際上假設它在東部時間,那麼你可以做適當的轉換到UTC。

整個使用當地時間是一般一個壞主意。如果你只涉及一個時區,那麼它不是不好,但如果你想要使用其他時區,它會變得很糟糕。 (這不僅僅是批量更新數據庫的問題 - 它將是檢查整個應用程序中日期的每一次使用的情況。)

轉到UTC選項IMO。

+0

@Jon我在考慮使用短日期時間的情況。 5/23/2010。這可能是23或24,並且不能轉換 - 取決於時間。即,日期可能是錯誤的。我可以在源頭處理這個問題。 – 2010-05-25 18:23:38

+0

@Curtis White:要麼有歧義 - 在這種情況下,您需要以任何方式處理它 - 或者沒有,並且您可以補償代碼中的時區。 – 2010-05-25 18:35:00

+0

@Jon感謝您的幫助。我更詳細地更新了這個問題,隨處轉換所有日期/時間的問題最終我最終需要SQL支持這些問題,這在SQL 2005中如何實現其中一些並不明顯。所以它變得一團糟。我決定最好將它存儲在元數據中,然後在需要切換時轉換所有時間,這也可以避免大多數轉換。 – 2010-06-01 00:52:05

0

以UTC格式存儲時間並將它們轉換爲您的視圖/頁面/無論是東方還是更好的轉換爲客戶端的本地時間。

另外,正如其他人所說,將UTC轉換爲東部時間不應該需要「大量代碼」,因爲您基本上從時間中減去了幾個小時,同時仍然略知曉夏令時。

例如,考慮

DateTime currentServerTime = DateTime.UtcNow.ToLocalTime(); 
+0

這將無法正常工作。我不想在服務器上的本地時間,但東部時間。不過謝謝。 – 2010-05-25 18:21:11

0

將數據以UTC格式存儲在數據庫中,然後轉換爲客戶端的本地時間。這樣,每個客戶都可以在他們當地的參考框架中看到時間,而且您不需要關注具體的時區。