You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:40:01