我試圖在當地時間顯示日期時間值。默認情況下,Azure SQL數據庫以UTC存儲日期和時間,但沒有辦法解決此問題。 (從內部SQL Server遷移時,這是一件痛苦的事。)我想在中歐時間顯示存儲的時間值。Azure SQL顯示當地時間
現在當地時間是11:30(CET)。 UTC時間是10:30。
DECLARE @TestTime DATETIME;
SET @TestTime = '2016-11-02 10:30:00'
SELECT @TestTime
--Returns 2016-11-02 10:30:00
SELECT @TestTime AT TIME ZONE 'Central European Standard Time'
--Returns 02 November 2016 10:30:00 +01:00
我需要返回2016-11-02 11:30:00莫名其妙。現在最有趣的部分:
如已提出here:
SELECT convert(DATETIME,@TestTime AT TIME ZONE 'Central European Standard Time',1)
--Returns 2016-11-02 09:30:00 So instead of adding the timezonedifference it subtracts it.
這工作,但讓我感到噁心:
SELECT DATEADD(MINUTE,DATEPART(tz,@TestTime AT TIME ZONE 'Central European Standard Time'),@TestTime)
--Returns 2016-11-02 11:30:00
類似的解決方案已經表明here,但它起着字符串操作。我懷疑AT TIME ZONE有什麼問題;它應該顯示11:30 + 1,而不是10:30 + 1,否?
在當地時間真的沒有合適的方式顯示UTC時間嗎?這種「黑客入侵」感覺非常骯髒,特別是因爲在任何時候它可能會停止工作(例如,微軟修復/引入了一個錯誤)。
謝謝!
你想在最後顯示本地日期時間? –
@drediske在[CET](https://www.timeanddate.com/time/zones/cet)中。我想在例子中看到的是11點30分。 (其實我的數據庫有來自其他幾個時區的用戶,並且夏令時也起作用,所以它更復雜一點。)歸結爲能夠將存儲的UTC時間值轉換爲所需的本地時間。 – vacip
我喜歡這些沒有評論的-1s ......如果選民啓發了我,我很想改善這個問題。 – vacip