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

在C++20中,std::chrono 进行了重大扩展,引入了对日历和时区的原生支持。这使得开发者无需依赖第三方库(如Howard Hinnant的 date 库或 Boost)就能处理日期、时间点与时区转换。以下是使用 C++20 的 std::chrono 处理日历和时区的核心方法。
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';}
通过 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';}
可以手动指定时区名称或偏移量来创建 zoned_time。IANA 时区数据库名称被广泛支持(需运行环境支持)。
常见用法:
Yaara
使用AI生成一流的文案广告,电子邮件,网站,列表,博客,故事和更多…
95
查看详情
current_zone():获取程序运行时的本地时区示例:查看时区信息
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';
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
注意:需要编译器支持
基本上就这些。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文件技巧【技巧】