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

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

我们有一个全天候记录大量数据的系统,其中一个业务规则是,没有两个记录可以记录为同时发生,在一秒钟内.

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

当然这会造成错误

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

但是根据UTC神,这将是一个实时的.活动可以在23:59:60进行,但是我们无法记录这个事实.

23:59:59加上一秒钟的抵消仍将被视为7月1日00:00:00.

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

解决方法

您不能,因为sql从Windows获取时间,Windows也不支持闰秒.

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

通常这意味着在延长的时间内每秒调整几纳秒.超过24小时,每分钟约一毫秒就会出现.

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

基本上,大多数应用程序只是假装没有像闰秒这样的东西.

对于大多数目的,这并不重要.如果您有一个这样的应用程序,操作系统将不会帮助您.您还需要一些特殊的硬件跟踪时间,因为操作系统通常无法保持时间到一秒钟内. Windows认同步每周或更少的时间,最便宜的PC硬件时钟(或甚至昂贵的服务器)可以轻松漂移几秒钟.

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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...