Sql-Server
為什麼 GetDate AND GETDATE() AT TIME ZONE ‘GMT Standard Time’ 返回錯誤的時間?
請看下面的程式碼:
DECLARE @UKDateTime as DateTime SELECT @UKDateTime = GETDATE() AT TIME ZONE 'GMT Standard Time' print @UKDateTime PRINT GETDATE()
這將返回:
Oct 4 2021 4:03PM Oct 4 2021 4:03PM
目前英國的時間是:下午 5:03(由我的電腦時鐘確認)。它似乎正在返回 UTC 日期。問題是什麼?
我將 SQL Server 設置為 Docker 容器。它是 SQL Server v18.4。
AT TIME ZONE的文件說:
將 inputdate 轉換為目標時區中相應的 datetimeoffset 值。當 inputdate 沒有提供偏移資訊時,該函式應用時區的偏移量,假設 inputdate 在目標時區。如果 inputdate 作為 datetimeoffset 值提供,則 AT TIME ZONE 子句使用時區轉換規則將其轉換為目標時區。
您正在使用 GETDATE,它返回沒有任何偏移資訊的日期時間,因此該函式假定它已經是目標時區中的時間。
如果要將本地伺服器日期和時間轉換為 GMT,可以使用:
SELECT SYSDATETIMEOFFSET() AT TIME ZONE 'GMT Standard Time';
或者,例如,如果您的本地伺服器時區是“東部標準時間”:
SELECT GETUTCDATE() -- datetime without context AT TIME ZONE 'Eastern Standard Time' -- where you are AT TIME ZONE 'GMT Standard Time'; -- target time zone