
C++20 的 <chrono></chrono> 确实带来了日历和时区的原生支持,不再是靠第三方库(如 Howard Hinnant 的 date 库)打补丁了——它直接把 date 库的核心逻辑“收编”进了标准。用起来清晰、类型安全、无运行时依赖,但需要理解几个新概念才能真正上手。
核心新增类型:年月日 + 时分秒 = civil time
C++20 引入了 std::chrono::year、std::chrono::month、std::chrono::day、std::chrono::year_month_day 等“日历类型”,它们不带时区、不带偏移,纯粹表示民用时间(civil time)。
例如:
-
std::chrono::year_month_day{2024y/3/15}表示 2024 年 3 月 15 日(注意2024y是字面量后缀,需包含<chrono></chrono>) -
auto ymd = sys_days{2024y/3/15};把日期转成系统时间点(即自 1970-01-01 的天数) -
ymd.time_since_epoch()返回days类型,可转为整数天数
把日期转成精确时间点:用 sys_days 和 sys_time
std::chrono::sys_days 是 system_clock::time_point 的“天粒度”别名,代表 UTC 时间轴上的某一天零点(00:00:00 UTC)。
立即学习“C++免费学习笔记(深入)”;
想得到带具体时刻的时间点?组合使用:
-
auto tp = sys_days{2024y/3/15} + 14h + 30min;→ 得到 2024-03-15 14:30:00 UTC -
auto tp_local = clock_cast<local_t>(tp);</local_t>→ 转成本地时区(非 UTC,但仍是本地系统时区,不含 IANA 时区名)
⚠️ 注意:local_t 不是某个具体时区(比如 “Asia/Shanghai”),只是当前系统的本地时区(由 std::chrono::current_zone() 返回的时区对象决定)。
标签: linux windows mac ai c++ macos win stream cos 标准库
还木有评论哦,快来抢沙发吧~