信息发布→ 登录 注册 退出

c++怎么用C++20的std::chrono处理时区和日历_C++时间处理与Chrono库进阶

发布时间:2025-11-09

点击量:
C++20的std::chrono引入year_month_day和zoned_time支持日历与时区处理,可通过locate_zone和current_zone获取时区信息,结合format实现格式化输出,需注意平台对IANA数据库的支持。

c++怎么用c++20的std::chrono处理时区和日历_c++时间处理与chrono库进阶

在C++20中,std::chrono 进行了重大扩展,引入了对日历和时区的原生支持。这使得开发者无需依赖第三方库(如Howard Hinnant的 date 库或 Boost)就能处理日期、时间点与时区转换。以下是使用 C++20 的 std::chrono 处理日历和时区的核心方法。

1. 年-月-日 日历操作

C++20 引入了 year_month_day 类型,可以直接表示公历中的日期,并支持格式化与有效性检查。

示例:构造并验证一个日期

#include <chrono>
#include <iostream>
<p>int main() {
using namespace std::chrono;</p><pre class="brush:php;toolbar:false;">// 构造日期
year_month_day ymd{year{2025}, month{3}, day{28}};

if (ymd.ok()) {
    std::cout << "有效日期: " << ymd << '\n';  // 输出: 2025-03-28
} else {
    std::cout << "无效日期\n";
}

// 从 time_point 转换为日历日期
auto now = system_clock::now();
auto today = floor<days>(now);
year_month_day today_ymd = today;

std::cout << "今天是: " << today_ymd << '\n';

}

2. 时间点与时区转换

通过 zoned_time 可以将时间点与特定时区关联,并进行跨时区转换。

示例:获取本地时间和不同时区的时间

#include <chrono>
#include <iostream>
<p>int main() {
using namespace std::chrono;</p><pre class="brush:php;toolbar:false;">// 获取当前 UTC 时间
auto now = system_clock::now();

// 创建带时区的时间对象(自动使用系统默认时区)
zoned_time local_time{current_zone(), now};
std::cout << "本地时间: " << local_time << '\n';

// 转换为纽约时间
zoned_time ny_time{"America/New_York", now};
std::cout << "纽约时间: " << ny_time << '\n';

// 转换为东京时间
zoned_time tokyo_time{"Asia/Tokyo", now};
std::cout << "东京时间: " << tokyo_time << '\n';

}

3. 手动解析与时区映射

可以手动指定时区名称或偏移量来创建 zoned_time。IANA 时区数据库名称被广泛支持(需运行环境支持)。

常见用法:

Yaara Yaara

使用AI生成一流的文案广告,电子邮件,网站,列表,博客,故事和更多…

Yaara 95 查看详情 Yaara
  • current_zone():获取程序运行时的本地时区
  • locate_zone("Zone/Name"):根据 IANA 名称查找时区
  • sys_info / local_info:查询时区信息(如夏令时状态)

示例:查看时区信息

const time_zone* tz = locate_zone("Europe/London");
auto info = tz->get_info(sys_days{June/1/2025y});
std::cout << "UTC 偏移: " << info.offset << '\n';
std::cout << "是否夏令时: " << (info.s*e != 0min) << '\n';

4. 格式化输出日期时间

C++20 支持使用 std::format 或流输出直接格式化 chrono 类型。

示例:自定义格式输出

#include <format>
<p>auto now = zoned_time{current_zone(), system_clock::now()};
std::string s = std::format("{:%Y年%m月%d日 %H:%M:%S %Z}", now);
std::cout << s << '\n';  // 如: 2025年03月28日 14:30:22 CST

注意:需要编译器支持 (GCC 13+, Clang 14+, MSVC 2025)

基本上就这些。C++20 的 chrono 让日历和时区处理变得直观且安全。只要注意平台是否完整支持 IANA 时区数据库(Linux 通常没问题,Windows 可能需要补丁),就可以写出跨平台的时间逻辑。关键是理解 time_point、local_time、zoned_time 和 year_month_day 各自的用途,避免混用类型。

以上就是c++++怎么用C++20的std::chrono处理时区和日历_C++时间处理与Chrono库进阶的详细内容,更多请关注其它相关文章!


相关文章: HTML元素状态管理:根据DIV内容动态启用/禁用按钮  Kafka Streams中基于消息头条件过滤消息的实现指南  sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE  邮政快递包裹最新位置 邮政快递实时追踪入口  必由学在线入口 必由学网页版快速登录入口  Go语言中Map存储的结构体如何调用指针方法:深入解析与实践  PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract  汽车之家官方网站官网入口_汽车之家网页版直接进入  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  快手网页版在线登录 快手网页版官网入口快速访问  如何使用Node.js csv 包按条件移除含空字段的CSV记录  zookeeper 都有哪些功能?  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  jQuery Mask 插件中实现电话号码固定前导零的教程  AO3访问入口汇总 AO3网页版同人作品一键直达  曝R星经典之作开发图 设计简陋但信息密集!  J*aScript数据结构转换:将对象数组按类别分组  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  Go语言中JSON数据解析与字段访问教程  2026春节假期票务安排_2026春节放假购票指南  将PCM16音频数据转换为W*并编码为Base64教程  C++ map遍历方法大全_C++ map迭代器使用总结  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  高德地图怎么看全景照片_高德地图全景照片浏览教程  如何将HTML表格多行数据保存到Google Sheets  必由学官网入口 必由学教师登录入口  ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接  Python Sounddevice 音频卡顿问题解析与队列数据安全处理  谷歌google账号注册详细步骤 谷歌账号注册官方教程  腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  Eclipse怎么运行工程_Eclipse工程运行配置说明  抓大鹅解压小游戏 抓大鹅摸鱼解压入口  ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  EMS快递官网app_中国邮政速递物流手机客户端  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  AO3官网镜像链接 Archive of Our Own同人文在线浏览  微博网页版首页入口 微博电脑端官网登录链接  处理嵌套交互式控件:前端可访问性指南  PHP文件上传至S3:策略、考量与避免本地存储的挑战  CSS实现侧边栏导航项全宽圆角悬停背景效果  win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】  抖音网页版怎么|直播|_抖音网页版开播操作指南  使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性  微信聊天记录怎么加密_微信聊天记录加密方法  痛风发作了怎么办? 快速止痛和后期饮食调理  怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!