如何解决使用 fmtlib 格式化 ISO 时间
我正在尝试使用 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)
解决方法
问题是您正在使用 -Werror=format-nonliteral
编译器标志进行编译,而 chrono 格式化程序使用动态格式字符串调用 strftime
。解决方案是删除-Werror=format-nonliteral
或添加-Wno-error=format-nonliteral
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。