sql-server-2008 - 在 SQL Server 2008 中存储闰秒

标签 sql-server-2008 datetime utc leap-second

这个周末是一个超长的周末,因为会有 extra second插入后 23:59:59 6 月 30 日。

我们有一个全天候记录大量数据的系统,其中一项业务规则是,不能将两条记录同时记录到一秒内。

我们使用 UTC 日期时间以及新的 datetimeoffset 数据类型,但据我所知,他们不会让您在一分钟内拥有超过 60 秒的时间。

当然,这会引发错误:

select datediff(ss, getdate(), '30-jun-2012 23:59:60')

但根据 UTC 众神的说法,这将是一个真实的时间。事件可在 23:59:60 举行但我们无法记录这个事实。
23:59:59加上一秒的偏移量仍将被视为 00:00:00 7 月 1 日。

如何正确记录事件发生在 23:59:60在数据库中?

最佳答案

您不能,因为 SQL 从 Windows 获取时间,而 Windows 也不支持闰秒。

Windows 通过从上游时间服务器获取新时间并应用通常的调整来应用闰秒,就好像它很简单 clock drift .

通常这意味着在很长一段时间内将每秒调整几纳秒。超过 24 小时,它将以每分钟约 1 毫秒的速度运行。

  • Windows 时间服务如何处理闰秒:http://support.microsoft.com/kb/909614
  • Does the windows FILETIME structure include leap seconds?
  • Windows 时间服务的工作原理:http://technet.microsoft.com/en-us/library/cc773013(v=ws.10).aspx

  • 基本上,大多数应用程序只是假装没有闰秒之类的东西。

    对于大多数目的,这无关紧要。如果您有一个应用程序,这很重要,操作系统将不会帮助您。您还需要一些特殊的硬件来跟踪时间,因为操作系统通常无法将时间保持在 1 秒以内。默认情况下,Windows 每周或更少地同步时间,并且大多数便宜的 PC 硬件时钟(甚至是昂贵服务器中的时钟)在这段时间内很容易漂移几秒钟。

    由于您确实关心确切时间,因此我假设您指向 pool.ntp.org 或您的区域子网,并且每天多次设置 w32time 进行同步。

    关于sql-server-2008 - 在 SQL Server 2008 中存储闰秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11260310/

    相关文章:

    python - 正确使用 utc 时间戳和本地日期时间

    ruby-on-rails - Ruby on Rails - YouTube API - 如何格式化持续时间 ISO 8601 (PT45S)

    typescript - 在 React Redux 中保存选定的日期而不是 utc 日期

    java - 将具有自定义时区的 java.util.Date 转换为 UTC

    sql - SQL Server 2008 组记录总和

    SQL 语句 - 如何通过索引提高速度

    sql - 使用数据库表作为队列

    javascript - 在 Javascript 中将日期转换为字符串

    vbscript - 使用 VBScript 确定我的时区偏移量?

    sql-server-2008 - 是否可以在 MS SQL 中的同一个表的两列或更多列上创建全文索引?