【问题标题】:What is the purpose of 61 in tm_sec field from the tm structuretm结构中tm_sec字段中61的目的是什么
【发布时间】:2016-10-05 21:35:12
【问题描述】:

根据tm 结构中的cplusplus.comtm_sec 字段在C90 中接受从0 到61 的值,在C99 及更高版本中接受从0 到60 的值。

我知道 60 可以用来表示闰秒,但是另一个(我的意思是 61)呢?他们为什么选择删除它?

是的,我将它同时标记为 C 和 C++,因为在这种情况下它与两种语言都相关。

【问题讨论】:

  • this answer 的 cmets 中询问和回答。
  • @πάντα ῥεῖ 你是认真的吗?
  • cplusplus.com 是错误的,或者至少已经过时了。 C90 错误地将范围指定为 [0, 61],因为 (IIRC) 有人错误地认为可能有两个连续的闰秒。 C99 将其更正为 [0, 60]。
  • 对我之前评论的更正:that web page 为 C90 和 C99 提供了单独的选项卡。 C99 选项卡显示正确的范围 [0,60](但没有注释来解释它)。 (重点是 C++,但 C++ 包含了大部分 C 标准库的引用。)

标签: c++ c


【解决方案1】:

061 的范围允许在给定年份的 12 月 31 日最多连续 2 个闰秒,这可能是错误的,因为在需要 2 个闰秒的年份中,这些不是在同一天添加的。

较新版本的 C 标准正确地假定在任何给定的一天一次最多插入一个闰秒。

正如https://en.wikipedia.org/wiki/Leap_second 中详细说明的那样,闰秒会在 12 月和/或 6 月插入,以避免漂移超过 0.9 秒,因此tm_sec 的最大值应为60 而不是61 .

【讨论】:

  • 这是有道理的,因为 UTC 的正式定义不允许双闰秒。见 cmets here
  • @RobertHarvey:我同意,并且参考是相当中肯的,虽然它不是重复的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 2019-12-18
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多