当年写时间。
最常见的写法。
就是拿一个整数。
表示“从某个起点过去了多少秒”。
你以为这就够了。
直到你要做“日历时间”。
当年:time_t 很像尺子,但日历不是尺子
time_t 很像一个刻度。
你加一天。
就是加 86400 秒。
听起来很合理。
但日历世界会反咬你。
夏令时那天。
可能不是 86400 秒。
有的地方会少一小时。
有的地方会多一小时。
线上啪一下:定时任务“每天 00:30”突然跑丢了
你写了个小服务。
每天凌晨跑一次。
你想当然地加 24 小时。
next = now + std::chrono::hours(24);
平时都没问题。
某天换夏令时。
任务就偏了。
偏了以后还会一直偏。
你排查半天。
才意识到。
你处理的是“日历”。
不是“秒数”。
C++20:chrono 有了日历类型
C++20 在 <chrono> 里加了日历组件。
你可以直接表达。
年。
月。
日。
#include <chrono>
using namespace std::chrono;
year_month_day d = 2026y / January / 18;
这句读起来像人话。
它不是时间戳。
它是一个日期。
还有时区
如果你真的需要“本地时间”。
你就得面对时区。
#include <chrono>
using namespace std::chrono;
auto z = current_zone();
current_zone() 给你当前机器的时区。
你不再需要自己查表。
你刚学 C++ 会卡:这些类型看起来很多
你可以先记住一个原则。
只要你在讨论“日历上的某一天”。
就尽量用日历类型。
不要用秒数硬凑。
只要你在讨论“本地时间”。
就把时区带上。
别假装世界只有 UTC。
关键结论
时间不是一个整数。
时间是一堆人类约定。
小结
C++20 chrono 的价值。
不是让你写出更酷的时间代码。
是让你在写“日历逻辑”时。
别再被秒数坑。