【问题标题】:How to create a date time offset column that defaults to the current utc date time如何创建默认为当前 utc 日期时间的日期时间偏移列
【发布时间】:2017-01-01 00:31:48
【问题描述】:

我想创建一个包含CreatedOn 列、类型为DateTimeOffset 的表,并且在插入记录时,我希望使用当前的UTC 日期和时间。

如果我添加GETUTCDATE() 的默认约束,它将以0 偏移量输入本地时间。如果我使用SYSUTCDATETIME(),它会使用正确的偏移量输入当地时间。

是否可以使用 0 偏移量获取 utc 时间?

【问题讨论】:

  • 您能否提供一些关于 GETUTCDATE(), SYSUTCDATETIME(), SYSDATETIMEOFFSET() 为您返回的结果以及您的正确偏移量应该是多少的结果?我很困惑为什么你不使用 SYSUTCDATETIME() 如果它给你正确的偏移量。我看了你的问题几次,不知所措——也许系统 DT 设置不正确?
  • 我当前的当地时间是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。它给了我一个无效偏移量的本地时间。

标签: sql-server tsql datetime utc


【解决方案1】:

我想您可以根据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
猜你喜欢
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2021-07-08
  • 2021-06-11
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多