为何我相减后,输出时间都是减了 10 天,是指针问题? now 和 s_tm 声明为两个变量了,求指教。
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);
|  |      1BrettD      2022-09-15 08:53:58 +08:00 via iPhone gmtime 返回的指针指向的那片 tm 结构体是全局共享的,也就是说两次 gmtime 调用会返回同一个地址,第二次 gmtime 把第一次的结果覆盖了 | 
|  |      2BrettD      2022-09-15 08:54:48 +08:00 via iPhone 加减时间戳是可以的,只是你要换一种方式去字符串化时间戳 | 
|  |      3ericls      2022-09-15 09:08:51 +08:00 via iPhone 有闰秒 | 
|  |      4ericls      2022-09-15 09:09:23 +08:00 via iPhone 还有夏令时 | 
|      5sparklee      2022-09-15 09:24:42 +08:00 本来就是直接时间戳想减 | 
|      7anytk      2022-09-15 09:52:26 +08:00  1 unix 时间戳直接加减时可以的,因为 unix 时间不考虑闰秒和夏令时,绝对时间轴,每天就是 24 * 60 * 60 秒。 也可以通过 struct tm 结构成员操作来计算偏移时间。 | 
|      8securityCoding      2022-09-15 10:01:24 +08:00  1 Unix 时间戳是从 1970 年 1 月 1 日( UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒。 | 
|      9hunk OP 谢谢各位,全局共享,这下记住了。换换其他方法 | 
|      10billgong      2022-09-15 11:01:15 +08:00 @securityCoding 但实际显示和计算需要考虑闰秒,所以是有影响的 | 
|  |      11L4Linux      2022-09-15 11:24:14 +08:00 用 C++20 吧: https://en.cppreference.com/w/cpp/chrono/day | 
|      12anytk      2022-09-15 13:41:30 +08:00 @billgong 显示也是不考虑的,闰秒的播发是通过网络或者 GPS ,比如 NTP 时间同步这些,核心是纠正真实时间与 UTC 时间的偏差。Unix 时间戳可以看作是 UTC 的一种表达方式而已。 显示是根据当地时区夏令时来计算的。 想详细了解可以看看初步的 GPS 时间设计。 | 
|  |      13dangyuluo      2022-09-15 13:47:06 +08:00 然后再考虑一下夏令时 | 
|  |      14adoal      2022-09-15 13:53:54 +08:00 提醒一下认为用 timestamp 则不用考虑闰秒和夏令时的人:“N 天前的日期” 是一个人为的历法概念,给天的日期编一个序号,往前倒数 N 个序号,而不是物理概念。历法里的每个“天”的长度不一定正好是 24*60*60 秒,算天数本质上只考虑日期的序号,不管每天长度是多少,都算作平等的一。 | 
|      15mxT52CRuqR6o5      2022-09-15 14:21:38 +08:00 https://en.wikipedia.org/wiki/Unix_time 我读了下 wiki ,我理解 unix 时间戳转 utc 年月日是受闰秒影响的 | 
|      16mxT52CRuqR6o5      2022-09-15 14:23:54 +08:00 @anytk  按照维基百科的说法,如果我没理解错的话,Unix 时间戳并不是 UTC 的一种表达方式,是会受到闰秒影响的 | 
|      17mxT52CRuqR6o5      2022-09-15 14:36:40 +08:00 我又仔细读了几遍 wiki ,我上面的结论有点问题,虽然 Unix 时间戳并不是 UTC 的一种表达方式,但 unix 时间戳转 utc 年月日是应该不会受闰秒影响 https://www.v2ex.com/t/706585 『正闰秒会出现一个 UNIX time 对应两个 UTC time ,负闰秒(从未发生)会导致一个 UNIX time 没有对应的 UTC time 』 | 
|      19julyclyde      2022-09-16 09:01:00 +08:00 @mxT52CRuqR6o5 你的理解错误 | 
|      20mxT52CRuqR6o5      2022-09-16 11:16:09 +08:00 via Android @julyclyde 正润秒会让一天内的某一分钟有 61 秒(对应 unix 时间戳的 60 秒,unix 的某个时间戳会有两个对应的 utc 时间),一天内的其他时间和年月日是感受不到这个润秒的,我这个理解是哪里有问题? | 
|      21julyclyde      2022-09-16 12:38:22 +08:00 @mxT52CRuqR6o5 用闰秒公布之前和之后的两个版本的 tzdata 去解读闰秒之后的同一个 timestamp 会得到不同的 utc 时间 | 
|      22mxT52CRuqR6o5      2022-09-16 12:50:04 +08:00 @julyclyde  按照 wiki 上举的那个例子,正闰秒多出来的那一秒会和上一个 utc 秒拥有同一个 unix 时间戳,不应该会出现你说的这种情况啊 | 
|      23julyclyde      2022-09-16 17:29:51 +08:00 @mxT52CRuqR6o5 你找个闰秒时刻,按照我给你的两种条件,双向计算一下试试 |