相关疑难解决方法(0)

为什么 GETUTCDATE 早于 SYSDATETIMEOFFSET?

或者,微软是如何让时间旅行成为可能的?

考虑这个代码:

DECLARE @Offset datetimeoffset = sysdatetimeoffset();
DECLARE @UTC datetime = getUTCdate();
DECLARE @UTCFromOffset datetime = CONVERT(datetime,SWITCHOFFSET(@Offset,0));
SELECT
    Offset = @Offset,
    UTC = @UTC,
    UTCFromOffset = @UTCFromOffset,
    TimeTravelPossible = CASE WHEN @UTC < @UTCFromOffset THEN 1 ELSE 0 END;
Run Code Online (Sandbox Code Playgroud)

@Offset设置在 之前 @UTC,但它有时具有较晚的值。(我已经在 SQL Server 2008 R2 和 SQL Server 2016 上尝试过这个。你必须运行几次才能捕捉到可疑的事件。)

这似乎不仅仅是四舍五入或缺乏精度的问题。(事实上​​,我认为舍入是偶尔“修复”问题的原因。)示例运行的值如下:

  • 抵消
    • 2017-06-07 12:01:58.8801139-05:00
  • 世界标准时间
    • 2017-06-07 17:01:58.877
  • UTC 偏移量:
    • 2017-06-07 17:01:58.880

因此日期时间精度允许 .880 作为有效值。

甚至Microsoft 的 GETUTCDATE 示例也显示 SYS* 值 …

sql-server datetime

8
推荐指数
1
解决办法
3565
查看次数

标签 统计

datetime ×1

sql-server ×1