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

如何使用libfmt格式化std::chrono::year_month_day类型?

如何使用libfmt格式化std::chrono::year_month_day类型?

嘿,我来帮你搞定用libfmt格式化std::chrono::year_month_day的问题~

首先你得确认已经装好了libfmt库,编译的时候别忘了链接它哦。接下来要做的其实很简单,和用标准库的std::format思路类似,但要记得包含libfmt专门的chrono支持头文件。

先给你看一个完整的可运行示例代码,我把你没写完的代码补全并改成了libfmt版本:

#include <chrono>
#include <fmt/chrono.h>
#include <iostream>

int main() {
    // 获取当前系统时间,向下取整到天并转换为year_month_day类型
    const std::chrono::time_point now{std::chrono::system_clock::now()};
    const std::chrono::year_month_day ymd{std::chrono::floor<std::chrono::day>(now)};

    // 先检查日期有效性,避免无效日期引发异常
    if (ymd.ok()) {
        // 用libfmt输出不同格式的日期
        std::cout << fmt::format("ISO标准格式:{:%Y-%m-%d}", ymd) << std::endl;
        std::cout << fmt::format("美式常用格式:{:%m/%d/%Y}", ymd) << std::endl;
        std::cout << fmt::format("中文风格格式:{:%Y年%m月%d日}", ymd) << std::endl;
    } else {
        std::cout << "这个日期是无效的,没法正常格式化哦" << std::endl;
    }
}

编译的时候,记得加上链接libfmt的参数,比如用GCC的话,命令是这样的:
g++ -std=c++23 your_code.cpp -lfmt -o date_formatter

这里还有几个关键点要提醒你:

  • 必须包含<fmt/chrono.h>,这是libfmt专门用来支持chrono日期时间类型格式化的头文件,少了它就没法处理year_month_day类型
  • 格式化的格式符和strftime、标准库std::format的chrono格式符一致,比如%Y对应四位年份,%m是两位月份,%d是两位日期
  • 一定要检查year_month_day的有效性,像2月30日这种无效日期,直接格式化会抛出异常,用ymd.ok()就能快速判断

怎么样,这样是不是就清晰多了?照着这个示例来,应该就能顺利格式化你的日期类型啦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:43:10