2017-10-09 60 views
0

如果我今天(2017年10月9日)針對SQL Server 2008實例執行select GetDate(),該函數將返回10/10/2017即明天的日期。 但是select convert(date, getDate())將返回9/10/2017。我不明白爲什麼。爲什麼GetDate()返回明天的日期?

可能相關:微軟文檔中說

返回當前數據庫系統時間戳作爲日期時間值 沒有數據庫時區偏移。此值來自運行SQL Server 實例的計算機的 操作系統。

without the database time zone offset是什麼意思?我的SQL Server目前在GMT + 11。

+1

這聽起來並不正確。你如何運行這個查詢?你能在SSMS中重現嗎?如果解決方案是 –

+0

共享解決方案。 – KumarHarsh

回答

0

嘗試使用

SELECT CURRENT_TIMESTAMP; 

OR

SELECT SYSDATETIME(); 

對於系統日期和時間。

此外,使用獲得UTC與本地時間:

SELECT GETUTCDATE() As UTCDateTime 

而且

SELECT CONVERT(DATETIME, SWITCHOFFSET(CONVERT(DATETIMEOFFSET, GETUTCDATE()), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS LocalDateTime 
+0

最後一個是相當反感... –

+0

我使用最後一個將雲託管數據庫中的UTC保存時間轉換爲本地時間。請建議更好。 – ViKiNG

+1

你寫的東西基本上是'SYSDATETIMEOFFSET()'。但是如果你說的不是內部的'GETUTCDATE()'你會使用一個數據庫字段,那麼你錯誤地認爲當前值的* current * offset與那個值相同領域。要正確轉換,您需要'AT TIME ZONE'(SQL 2016+)或者更早的SQL使用我的[SQL Server時區支持](https://github.com/mj1856/SqlServerTimeZoneSupport)項目。 –

相關問題