【问题标题】:Formatting ISO time using fmtlib使用 fmtlib 格式化 ISO 时间
【发布时间】:2021-06-29 02:02:53
【问题描述】:

我正在尝试使用 fmtlib 获得std::string 的 ISO 时间。 考虑以下代码:

const auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
const auto creation_time = fmt::format("{:%FT%T%z}", fmt::localtime(t));

我收到以下错误:

../deps/fmt-src/include/fmt/chrono.h: 在函数'size_t fmt::v7::detail::strftime(char*, size_t, const char*, const tm*)'中: ../deps/fmt-src/include/fmt/chrono.h:377:48:错误:格式不是字符串文字,未检查格式字符串 [-Werror=format-nonliteral] return std::strftime(str, count, format, time);

我不明白,显然fmt::localtime(t) 不是编译时字符串。

我错过了什么?

使用 fmtlib v7.1.3,使用以下标志编译以在嵌入式系统上工作:

target_compile_definitions(fmt PRIVATE FMT_STATIC_THOUSANDS_SEPARATOR FMT_USE_DOUBLE=0 FMT_USE_LONG_DOUBLE=0)

【问题讨论】:

    标签: c++ fmt


    【解决方案1】:

    问题是您使用 -Werror=format-nonliteral 编译器标志进行编译,而 chrono 格式化程序使用动态格式字符串调用 strftime。解决方法是去掉-Werror=format-nonliteral或者添加-Wno-error=format-nonliteral

    您也可以使用 {fmt} 5a37e1 或更高版本来抑制此警告。

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2021-01-19
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多