如何用std::chrono获取并显示当前的日、月、年?
解决std::chrono显示年月日的问题
嘿,我来帮你搞定这个报错!你遇到的问题主要有两个原因,咱们一步步拆解:
1. 编译器标准支持问题
std::chrono::day、std::chrono::year这些日历组件是C++20才正式引入的。如果你的编译器没有启用C++20标准,就会报“day不是std::chrono成员”的错误。
解决方法:编译代码时要指定C++20标准:
- GCC/Clang:添加编译选项
-std=c++20 - MSVC:添加编译选项
/std:c++20
2. 代码逻辑的问题
你原来的代码直接输出std::chrono::day这个类型本身,这是不对的——你需要先获取当前系统时间,将其转换为日历类型,再提取具体的年、月、日值。
正确的实现代码
下面是完整的可运行示例,我加了详细注释:
// Example program #include <iostream> #include <chrono> int main() { // 1. 获取当前系统时间点(从epoch到现在的时间) auto now = std::chrono::system_clock::now(); // 2. 将时间点转换为C++20的sys_days类型,它代表基于系统时钟的日期 auto today = std::chrono::floor<std::chrono::days>(now); // 3. 将sys_days分解为年、月、日 std::chrono::year_month_day ymd = today; // 4. 输出结果,注意要显式转换为整数类型(因为year/month/day是强类型) std::cout << "当前日期:" << static_cast<int>(ymd.year()) << "年" << static_cast<unsigned>(ymd.month()) << "月" << static_cast<unsigned>(ymd.day()) << "日" << std::endl; return 0; }
代码解释
std::chrono::system_clock::now():获取当前系统的时间点std::chrono::floor<std::chrono::days>(now):把时间点向下取整到天,得到当天的起始时间点std::chrono::year_month_day:这是C++20提供的日历类型,可以直接从sys_days转换而来,包含年、月、日的信息- 最后要把
year、month、day转换为整数类型才能正常输出,因为它们是强类型的类对象,不是直接的数值
这样编译运行后,就能正确显示当前的年、月、日啦!
内容的提问来源于stack exchange,提问作者user9021371
相关产品推荐
相关产品推荐

