【问题标题】:What does the 'tm' in `struct tm` stand for?`struct tm` 中的 'tm' 代表什么?
【发布时间】:2017-12-25 01:47:21
【问题描述】:

只是好奇。我倾向于将struct tm 类型的变量命名为time_bits 或类似的名称,因为它包含分解的日历时间位。我看到的大多数文档都将这种类型称为“日历时间”,而不是 time_t 的“时钟时间”或“纪元秒”。

【问题讨论】:

  • 您肯定会想阅读C Date Time tutorial
  • @DavidC.Rankin 读得很好。简明扼要,内容丰富。然而,它确实完全错误地表示了 UTC 的 POSIX 表示(它缺少闰秒 - 所以它可以用于读取时间,但不能用于测量它的长跨度)。我找到的唯一好的参考是Olsen's / the IANA's timezone database 和相关的libtz.a
  • 点很好,但要全面了解 时间日历 Calendars - Explanatory Supplement to the Astronomical Almanac (uspno.navy.mil) 是一个很好的起点。从天文学的角度来看,行星位置需要几乎所有时间应用中的最精确(相对论效应除外)。
  • 标准库中的很多东西都没有合理的理由,包括命名。当 C 被标准化时,他们只是简单地从 Unix 代码库中到处挑选各种函数,并赋予它们“标准库”的地位。即使功能混乱且设计不佳。至于曾经发明 struct tm 的 Unix 恐龙是什么样的,以及他们为什么如此命名事物,C 的基本原理中没有提到。这一切都可以追溯到 70 年代初。

标签: c datetime c11


【解决方案1】:

如果命名为struct time,很多人会和这个函数混淆:

time_t time(time_t *);

虽然在 C 结构体中标记不会干扰变量/函数名称,但为它们设置不同的名称可以减少混淆。

【讨论】:

    【解决方案2】:

    几乎可以肯定它只是代表“时间”。 ISO 标准将其描述为一个事物:

    ...包含日历时间的组成部分,称为细分时间。

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 2017-09-26
      • 2012-08-27
      • 1970-01-01
      • 2015-09-09
      • 2016-05-25
      • 2015-05-06
      • 2016-07-02
      • 2020-07-23
      相关资源
      最近更新 更多