2012 年,这里有一个关于 SO 的问题,.NET 的 DateTime 是否能够识别闰秒。[1] 答案是否定的。
该文档仍然明确指出它不是。[2]
但是,Windows Server 2019 和 2018 年 10 月 10 日的 Windows 更新使Windows 本身具有闰秒意识。[3]
这就引出了一个问题:.NET 现在是否天生具有闰秒意识?更具体地说:我是否可以通过某种方式选择加入,让我的DateTime
结构也能感知秒级?
编辑:
来自题为“任务:在 Windows 上编写闰秒感知应用程序”[4](我强调)的 MS Word 文档:
已知问题:已知某些框架会在闰秒发生后错误地计算时间。例如,.NET Framework 使用它自己的内部逻辑来确定现在是什么时间。它的逻辑不考虑闰秒。因此,在操作系统引入闰秒后,“System.DateTime.Now.ToString()”的输出将比本地系统时间提前一秒。 (我们正在与 .NET 框架团队合作。)
从[5]:
众所周知,某些应用程序通过假设一分钟总有 60 秒来错误地计算时间。由于闰秒可以改变这种行为,他们将不正确地记录此事件期间的时间。例如(在撰写本文时):
.NET Framework 使用自己的内部逻辑来确定现在是什么时间,并且不考虑闰秒。因此,依赖 .NET Framework 的 PowerShell 在使用 Get-Date 时不会报告第 61 秒(数字 60)
事件查看器:事件的日期将被错误记录。但是,事件元数据会正确记录系统时间(显示第 60 秒)。
注意:这些团队正在努力更新他们的软件,以便在处理闰秒时使用更合适的数学。
因此,.NET 似乎会在未来的某个时间意识到闰秒。因此,我不会将此作为解决方案发布。
[1] .Net 的 DateTime 方法是否能够识别闰秒?
[3] https://support.microsoft.com/en-us/help/2722715/support-for-the-leap-second
[4] https://aka.ms/Dev-LeapSecond (MS Word)
[5] https://aka.ms/ITPro-LeapSecond (MS Word)