我想創建一個CreatedOn
列的DateTimeOffset
類型的表,並且插入記錄時,我希望當前的UTC日期和時間爲使用。如何創建默認爲當前utc日期時間的日期時間偏移列
如果我添加一個默認約束GETUTCDATE()
,它會在本地時間使用0偏移量。如果我使用SYSUTCDATETIME()
它會在當地時間輸入正確的偏移量。
是否有可能在0偏移量中獲得utc時間?
我想創建一個CreatedOn
列的DateTimeOffset
類型的表,並且插入記錄時,我希望當前的UTC日期和時間爲使用。如何創建默認爲當前utc日期時間的日期時間偏移列
如果我添加一個默認約束GETUTCDATE()
,它會在本地時間使用0偏移量。如果我使用SYSUTCDATETIME()
它會在當地時間輸入正確的偏移量。
是否有可能在0偏移量中獲得utc時間?
我想你可以強迫它取決於SYSUTCDATETIME()
或任何其他日期時間戳是什麼抵消你想要的。您可以使用以下並更改偏移到你希望它是和使用GETDATE()
代替GETUTCDATE()
,等什麼都...
SELECT GETUTCDATE() AS UTC_DT, SYSUTCDATETIME() AS SYS_UTC_DT, SYSDATETIMEOFFSET() AS SYS_DT_OFFSET
SELECT CAST(TODATETIMEOFFSET(GETUTCDATE(), '+00:00') AS DATETIME2) AS UTC_WITH_OFFSET --SQL SERVER 2008 and onward...
SELECT GETDATE() AT TIME ZONE 'UTC' --SQL SERVER 2016 only...
這足夠接近我們將要做的事情。我們將使用的默認值是SYSDATETIMEOFFSET,並與我們所有的具有本地偏移量的日期一起使用。 –
仍然是一個有趣的問題,我要去調查@JoshuaBelden – scsimon
你能提供一些結果是什麼'GETUTCDATE(),SYSUTCDATETIME() SYSDATETIMEOFFSET()'正在返回給你,什麼正確的偏移量應該是你?如果它給你正確的偏移量,我很困惑你爲什麼不使用'SYSUTCDATETIME()'。我幾次閱讀你的問題,並且無所適從 - 可能sys DT設置不正確? – scsimon
我目前的當地時間是2016-08-24 13:44:19.5187024,選擇SysUtcDateTime()返回2016-08-24 20:44:19.5187024。這是正確的utc日期和時間,儘管它沒有說,它仍然是0。如果我將默認約束設置爲SysUtcDateTime(),則該列中的值爲2016-08-24 13:44:19.5187024 +00:00。它給了我一個無效抵消的當地時間。 –