2017-09-05 92 views
1

我們在SQL Server 2008中的數據,與多個日期時間列。由於SQL Server中的日期格式是一個很大的整數值,即自1970年以來的秒數,我們使用DATEADD()功能,將其轉換成實際的日期時間格式。但是我們面臨的問題是,當我們使用DATEADD()時,我們得到UTC時區的數據,而我們希望在EST中獲得數據。我想簡單地使用-4從時間,但NOV期間HR - MAR我們領先1個HR,因爲不同的是5小時夏時制時間處於關閉狀態。是否有任何功能可以用於考慮夏令時。任何幫助表示讚賞。UTC到EST SQL Server 2008中

Current Function -> DATEADD(s, columnName, '01/01/1970 00:00:00') 

問候,薩赫勒

+4

有沒有什麼本地。這非常困難。夏令時的日期在過去幾年中發生了變化。有些州不承認夏令時。即使亞利桑那州的整個州都不承認夏令時。這只是美國的複雜情況。一旦你走出這些邊界就會變得更加複雜。 –

+0

有些整個庫是嚴格爲了處理日期/時間而編寫的(*如NodaTime,Momentjs等*),但對於我所知的Sql Server而言,因爲這通常是在應用程序層而不是持久層中解決的。 – Igor

+0

您可以導入一個包裝TimeZoneInfo類的程序集,並從Windows註冊表值中讀取時區偏移量(與其相同的方式窗口)。這些值在您應用Windows更新時會發生零星更新。時區信息不僅根據預定的時間(DST或其他)而變化,而且隨着地區和國家認爲合適的臨時基礎變化。我會使用一個經過測試的庫並將其導入到sql server中。 –

回答

0

試試這個:

DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), columnName) 
+1

只有當我們希望時間轉換處於當前時間時(即,如果當前是夏令時),這才起作用。我相信OP的日期大概是一年左右,需要根據現場日期從UTC轉換爲EST。 – erict

-1

我會寫如worldtimeserver.com之一,隨着時間的數據庫交互的UDF - 我不隸屬於與他們並發現它與快速的互聯網搜索。

進一步研究表明timezonedb.com其中有一個免費的(如果非商業)的會員,允許下載的數據庫,並提供了有關如何使用SQL Server和MySQL的使用示例。

0

你可以用我SQL Server Time Zone Support項目這一點。它使用IANA標準時區名稱,as listed here

以您的示例爲基礎,以下內容首先將UNIX時間戳轉換爲基於UTC的datetime,然後在美國東部時區轉換爲datetime

SELECT Tzdb.UtcToLocal(DATEADD(s, columnName, '1970-01-01 00:00:00'), 'America/New_York')