计算 N 天前的日期的艺术


朴素的方法(C)

time_t now = time(0);

tm *e_lt = gmtime(&now);
time_t s_tm = time(0);

s_tm -=60*60*24*10;

tm *s_lt = gmtime(&s_tm);

值得注意的是,gmtime 返回的指针指向的那片 tm 结构体是全局共享的,也就是说两次 gmtime 调用会返回同一个地址,第二次 gmtime 把第一次的结果覆盖了。

加减时间戳这个想法是可以的,只是要换一种方式去字符串化时间戳。

其他问题

  • 闰秒
  • 夏令时

UNIX 时间戳

UNIX 时间戳直接加减时可以的,因为 UNIX 时间不考虑闰秒和夏令时,绝对时间轴,每天就是 24 * 60 * 60 秒。 也可以通过 struct tm 结构成员操作来计算偏移时间。

Unix 时间戳是从 1970 年 1 月 1 日( UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒。

关于闰秒

闰秒的显示一般来说是不考虑的,闰秒的播发是通过网络或者 GPS ,比如 NTP/PTP 时间同步这些,核心是纠正真实时间与 UTC 时间的偏差。Unix 时间戳可以看作是 UTC 的一种表达方式而已。 显示是根据当地时区夏令时来计算的。

想详细了解可以看看初步的 GPS 时间设计。

C++ 20 Standard

https://en.cppreference.com/w/cpp/chrono/day


文章作者: sfc9982
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 sfc9982 !
  目录