std::chrono 和缺少 (?) 对负闰秒的支持

sh-*_*sh- 7 c++ c++-chrono leap-second c++20

C++20 添加了时区支持std::chrono,其中包括闰秒。然而,似乎只支持闰秒插入,而不支持闰秒删除,即负闰秒。(诚​​然,自 1972 年以来,只有正闰秒;但在过去几年中,这种趋势似乎已经逆转,未来几年似乎有可能出现负闰秒。)

从类的描述方式中可以明显看出这一点std::chrono::leap_second- 无法区分正闰秒和负闰秒。

是否知道为什么std::chrono不支持这种可能性?这是一种优化,还是某种错误?或者它已经支持但我错过了一些东西?

注意:MSVC 实现似乎有一个允许负闰秒的非标准功能。

Chr*_*sMM 10

[time.zone.leap.members]/2实际上确实指定了负闰秒。

\n
\n

返回:+1s 表示正闰秒,-1s 表示负闰秒。\n[注 1:截至 2019 年插入的所有闰秒均为正闰秒。\xe2\x80\x94 尾注]

\n
\n

当标准谈到插入闰秒时,该闰秒可能是负数,这与删除相同。

\n

注意:我不确定这对于 C++23 还是 C++20 来说是新的,我现在没有 C++20 草案的副本。

\n

  • FWIW,您可以在这里获取所有现代标准的实时草案:https://github.com/timsong-cpp/cppwp (3认同)