2010-11-23 107 views
2

在SQL Server中,我想創建一個表來節省事件的時間,並且希望將其轉換爲用戶選擇的時區以用於顯示目的。讓我們說,如果在格林尼治標準時間下午1點發生在倫敦的事件,那將是美國東部時間上午8點。SQL Server如何在不同時區保留和使用時間

鑑於這個例子,我想創建一個工作框架,

  1. ,其中用戶將不得不保存事件和時間(給予事件的時區)

  2. 的能力閱讀這些事件,在他喜歡的時區顯示時間(美國東部標準時間)

如何在SQL Server中完成此操作。

+1

哪個**版本的SQL Server? SQL Server 2008有一個新的數據類型`DATETIMEOFFSET`,它是一個DATETIME,包括一個時區偏移量 - 對你的情況來說是完美的 – 2010-11-23 15:19:00

回答

4

在SQL Server 2008中,使用DATETIMEOFFSET數據類型,該數據類型是DATETIME加上包含的時區偏移量。

SELECT CAST('2010-11-23 16:35:29+09:00' AS datetimeoffset) 

將於2010年11月23日下午4:35 +9小時(GMT)時區。

SQL Server 2008還包含功能和SQL命令來DATETIMEOFFSET值轉換,從一個時區到另一個:

SELECT 
SWITCHOFFSET(CAST('2010-11-23 16:35:29+09:00' AS datetimeoffset), '+01:00') 

會導致:

2010-11-23 08:35:29.0000000 +01:00 

同一時間,不同的時區(1小時from GMT)

+0

+1,希望我能給更多。 – Brad 2010-11-23 16:05:39

0
  1. 當你保存數據,保存GMT,而不是本地時間爲用戶(在C#這是DateTime.UtcNow
  2. 在你的應用程序邏輯,記錄用戶的時區,並翻譯GMT時間到用戶的本地時間使用時區偏移量,在運行時。
+0

`GMT!= UTC`:參見@ chezy的帖子評論 – Brad 2010-11-23 16:09:48

0

我已經解決了類似的問題的方法是做到以下幾點:

  1. 表的設計是隻存儲GMT時間。
  2. 所有輸入都經過一個存儲過程,需要輸入一個時區偏移量。
  3. 數據請求是Table-Valued Function,帶有時區偏移量的輸入。
+0

FYI:`GMT`是程序員-speak,已棄用。它基於**太陽日均值**。 UTC是基於原子鐘並代替`GMT`。爲了這裏所述的目的,它們是等價的,但是`GMT`已經不再使用了。 http://geography.about.com/od/timeandtimezones/a/gmtutc.htm – Brad 2010-11-23 16:09:09

相關問題