2017-01-04 46 views
0

在SQL Server查詢中是否可以將datetimeoffset轉換爲相應的時區?例如,我已存儲的值:將SQL Server DateTimeOffset轉換爲時區

2015年1月3日00:30 -06:00

2015年1月10日00:30 -05:00

我想我的SQL查詢如果夏令時有效,則將-06:00顯示爲CST或CDT;將-05:00顯示爲EST或EDT。

我編碼RSS Feed的,我最終想要我的結果集列顯示:

週五,2015年1月2日18:30 CST

週五,2015年1月9日18:30 EST

任何幫助將不勝感激。謝謝!

+1

爲什麼-06:00 CST?它可以是許多有效時區中的任何一個。你只想要美國的時區嗎?你可以使用DATEPART(TZoffest,YourDate)和一個表達式。 –

+0

SQL Server不提供任何返回DateTimeOffset的時區名稱的內置函數。您可能需要創建這樣的功能,或者在消費應用程序上進行格式化。 – wdosanjos

+0

@wdosanjos這不需要一個功能。如果只有美國時區,一個簡單的案例表達式可以輕鬆處理。 –

回答

0

下面是一個如何使用DATEPART來做到這一點的例子。如果您需要更多時區,則可能需要使用查找表並加入DATEPART的值。請記住,每個偏移量都有多個時區。這些會因緯度而異。

create table #TimeZoneExample 
(
    MyDateTimeOffset datetimeoffset 
) 

insert #TimeZoneExample 
select '2015-01-03 00:30 -06:00' union all 
select '2015-01-10 00:30 -05:00' 

select convert(datetime, MyDateTimeOffset) as PostDate 
    , case DATEPART(TZoffset, MyDateTimeOffset)/60 
     when -5 then 'EST' 
     when -6 then 'CST' 
     when -7 then 'MST' 
     when -8 then 'PST' 
     else 'Unknown Time Zone' 
    end 
from #TimeZoneExample 

drop table #TimeZoneExample 
+1

不幸的是,這不考慮夏令時。 – wdosanjos

+0

謝謝朗格先生的代碼示例。 – behofmann

+0

好點@wdosanjos,當然,根據提供的示例信息,甚至幾乎不可能做到這一點,因爲並非所有的地點/國家/州都使用夏令時。建議您需要大幅擴展以適應國際時間。任何準確的結果都需要比datetimeoffset更多的信息。您還需要知道位置,以便確定準確的時間。不知道這裏是否需要100%,但肯定值得一提。 –

0

當我有在這方面努力,我意識到,真正起作用的唯一選擇是保存所有的日期/時間爲UTC,幷包括關係提高到一個表中的時區指示器顯示當任何時區的變化,例如夏令時,就會發生。這將需要您的數據的自定義代碼。

幸運的是,有人維護時區數據的數據庫,包括DST轉換等 - IANA Time Zone DB。您可以自己使用和更新原始數據,也可以查看有關如何執行此操作的其他示例,其中包括GitHub上的SQL Server Timezone Support Project

最後,UTC,時區和轉換數據庫是確保時區之間時間的完美準確性和可轉換性的唯一方法 - 尤其是那些與UTC相差15分鐘或1/2小時的罕見TZ。

相關問題