值得一看
广告
彩虹云商城
广告

热门广告位

c++怎么使用C++20的日历和时区库_C++20 chrono扩展的日期时间库用法

C++20新增chrono日历与时区支持,提供year、month、day等类型及year_month_day组合,实现类型安全的日期操作,无需第三方库即可处理复杂时间计算。

c++怎么使用c++20的日历和时区库_c++20 chrono扩展的日期时间库用法

C++20 引入了对 chrono 库的重大扩展,新增了日历(calendar)和时区(time zone)支持,让处理日期、星期、年月日以及时区转换变得直观且类型安全。这些功能定义在 <chrono> 头文件中,无需第三方库即可完成复杂的日期时间操作。

1. 基本日历类型:年、月、日、星期

C++20 提供了表示日历组件的类型,如 yearmonthdayweekday,以及组合类型 year_month_day

// 构造一个具体的日期

std::chrono::year y{2025};

立即学习“C++免费学习笔记(深入)”;

std::chrono::month m{3};

std::chrono::day d{28};

std::chrono::year_month_day date{y, m, d};

if (date.ok()) {

  std::cout (y) (m)

    (d)

}

你也可以从 sys_days(自1970-01-01起的天数)反向构造:

auto today = std::chrono::floor(

  std::chrono::system_clock::now());

std::chrono::year_month_day ymd{today};

std::cout

2. 获取星期几和月份名称

使用 weekday 可获取某天是星期几。

std::chrono::weekday wd = std::chrono::weekday{ymd.day()};

std::cout

// 或者获取数字(0=Sun, 1=Mon, …)

std::cout

也可判断是否为有效日期:

std::chrono::year_month_day bad_date{2025y/13/40};

if (!bad_date.ok()) {

  std::cout

}

3. 时区操作:带时区的时间处理

C++20 支持通过 zoned_timecurrent_zone() 等处理本地与不同时区的时间。

AppMall应用商店

AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店56

查看详情
AppMall应用商店

// 获取当前系统时间

auto now = std::chrono::system_clock::now();

// 获取本地时区

const std::chrono::time_zone* tz =

  std::chrono::current_zone();

// 绑定时间和时区

std::chrono::zoned_time local_time{tz, now};

std::cout

转换到其他时区也很简单:

// 转换为东京时间

auto tokyo = std::chrono::locate_zone(“Asia/Tokyo”);

std::chrono::zoned_time tz_time{“Asia/Tokyo”, now};

std::cout

注意:时区数据库需要运行环境支持(如 Linux 下通常自带,Windows 需额外配置或使用兼容层)。

4. 格式化输出日期时间

C++20 支持使用 std::format 或流输出格式化时间。

#include <format>

auto now = std::chrono::system_clock::now();

std::cout

// 输出如:2025-03-28 14:30:22

也可以格式化带时区的时间:

std::chrono::zoned_time zt{“America/New_York”, now};

std::cout

// 输出如:2025-03-28 03:30:22 EST

常见格式符:

  • %Y:四位年份
  • %m:月份(01-12)
  • %d:日期(01-31)
  • %H:小时(00-23)
  • %M:分钟(00-59)
  • %S:秒
  • %Z:时区缩写
  • %F:等价于 %Y-%m-%d
  • %T:等价于 %H:%M:%S

基本上就这些。C++20 的 chrono 扩展让日期和时区操作变得清晰、安全且可读性强,避免了传统 time_t 和 struct tm 的繁琐与易错。

相关标签:

c++ 2025 if date Calendar

大家都在看:

c++中的菱形继承问题如何解决_菱形继承的成因与virtual继承的解决方案
c++怎么获取文件的大小_c++读取文件大小的多种方法
c++怎么使用C++ Coroutines和Boost.Asio_C++协程结合Asio实现异步编程示例
C++ 如何初始化一个数组_C++ 数组初始化语法大全
C++如何创建一个抽象基类_C++纯虚函数与接口类实现方式
温馨提示: 本文最后更新于2025-11-02 22:28:36,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞7赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容