2010-04-01 41 views
4

我有一個數據結構,其中一個實體的存儲時間爲int(分鐘到一天)以進行快速比較。該實體還具有返回到TimeZone表的外鍵參考,該表包含.NET CLR ID名稱和標準時間/日光時間首字母縮略詞。如何存儲和比較時區敏感時間

由於此信息存儲爲時區不敏感 - 我想知道如何在LINQ到SQL我可以將其轉換爲UTC日期時間與其他時間將用UTC進行比較。

只是要清楚這個轉換必須完成服務器端,以便我可以在SQL Server而不是客戶端上執行篩選。其原因是爲了確保我們考慮到支持DST的時區。

我使用.NET 3.5 SP1和SQL Server 2008

回答

2

我可以存儲一個CurrentOffset字段,該字段需要通過腳本進行更新,該腳本將在每小時更新一次,以確定上下文偏移量。

1

理想的情況下,時間應被存儲在UTC的數據庫,只有轉化爲一些地方時區(其中包括一個DST因素在適當情況下)對顯示。這是,尤其是如果「快速比較」是您的目標,則爲true。

您可能會發現添加一個包含UTC時間的額外字段,修改客戶端以添加此信息並運行一次性計算現有條目的腳本是最容易的。

+0

這個問題是,如果他們在DST期間設置了一個時間,然後它改變爲非DST比較將關閉一個小時。因此時間背景比較很重要。根據定義, – 2010-04-05 13:53:14

+1

UTC,沒有DST時間段。因此,考慮夏令時的時間是從本地時區轉換到UTC時間,並返回。一旦使用UTC形式,DST與比較無關。 UTC是爲了您的目的,與GMT相同。英國使用兩個時間偏移量:GMT和BST。 BST是將當地DST應用於GMT時發生的情況。但是你仍然可以在夏季參考GMT和UTC,瞭解它們與BST的時差不同。 – Chromatix 2010-04-08 07:43:18