c++20的日历和时区库怎么用 库的史诗级增强【现代C++】

admin 百科 12
c++kquote>C++20 原生支持日历与时区:引入 year/month/day 等民用时间类型,sys_days 表示 UTC 零点,locate_zone 支持 IANA 时区, 和 parse 实现格式化与解析,需注意有效性检查和时区数据依赖。

c++20的日历和时区库怎么用 库的史诗级增强【现代C++】-第1张图片-佛山资讯网

C++20 的 <chrono></chrono> 确实带来了日历和时区的原生支持,不再是靠第三方库(如 Howard Hinnant 的 date 库)打补丁了——它直接把 date 库的核心逻辑“收编”进了标准。用起来清晰、类型安全、无运行时依赖,但需要理解几个新概念才能真正上手。

核心新增类型:年月日 + 时分秒 = civil time

C++20 引入了 std::chrono::yearstd::chrono::monthstd::chrono::daystd::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_dayssys_time

std::chrono::sys_dayssystem_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 标准库

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~