2012-01-23 75 views
2

我將數據存儲爲UTC,但我很困惑如何正確檢索它。我將該值存儲爲MSSQL中日期時間列中的UTC。目前,我檢索它的方式是將GMT偏移量設置爲開始日期時間範圍和結束日期時間範圍。我還需要將聚合應用於該日期時間字段(group by),並將其顯示在用戶適當的本地時區中。我遇到的問題是如果我今天查找範圍,它會提取正確匹配的列,但這些列中的日期時間值可能與UTC天不同;我正在分組。因此,例如,當某人選擇一天的開始時間和結束時間(今天)時,它們將顯示來自昨天和今天的UTC日期時間值;但如果我嘗試將GMT偏移量應用於顯示值,它仍然可能出現2個不同的日期。我怎樣才能正確地協調範圍和顯示?如何正確存儲UTC日期時間並使用本地偏移量?

由於

回答

5

轉換UTC格式日期到CST或EST(例如)的標準時間是直線前進。我們必須將偏移值存儲在我們應用程序中所需的每個時區的單獨列或表中。

例如:UTC到CST是-6小時。 UTC到EST的時間同樣是-5小時。

DECLARE @UTC_Date DATETIME 
SET @UTC_Date = GETUTCDATE() 

SELECT 
@UTC_Date AS [UTC], 
DATEADD(hh, -6, @UTC_Date) AS [CST - Standard Time], 
DATEADD(hh, -5, @UTC_Date) AS [EST - Standard Time] 

一旦我們在夏令成計算把它變得複雜。但是,如果給定的日期屬於夏令時,則上述計算將不起作用。

那麼夏令時是如何計算的?

  1. 如果一年< = 2006年則實行夏令時間: 凌晨2點第一個星期日四月至凌晨2點的最後一個星期日

    十月
  2. 如果年份> = 2007,然後夏令之間: 凌晨2點在三月第二個星期日,直到凌晨2點第一個星期日十一月

  3. UTC到CST(標準時間)= -6

  4. UTC至CDT(夏令時)= -5

  5. UTC到EST(標準時間)= -5

  6. UTC到EDT(夏時制時間)= -4

檢查出該解決方案在這裏處理夏令時 - http://vadivel.blogspot.com/2011/10/timezone-conversion-utc-to-cst-with.html

相關問題