使用xlnt库将xlnt::date转换为std::string时出现编译错误
使用xlnt库将xlnt::date转换为std::string时出现编译错误
嘿,我之前也踩过这个坑!你尝试的直接用std::string构造函数或者static_cast来转xlnt::date肯定行不通,因为xlnt::date类既没有提供接受它的std::string构造函数重载,也没定义到std::string的转换操作符,所以编译器才会抛出那个“找不到匹配函数”的错误。
别担心,xlnt库本身已经给我们准备好了现成的转换方法,有两种常用方案:
方式一:用默认格式的to_string()方法
这个方法会返回标准ISO格式的日期字符串(比如"2024-05-20"),用法特别简单:const auto vdate = cell.value<xlnt::date>(); std::string vdates = vdate.to_string();方式二:自定义日期格式的format()方法
如果需要输出特定格式的日期(比如美式的"05/20/2024"或者欧式的"20-05-2024"),可以用format()成员函数,传入对应的格式占位符:const auto vdate = cell.value<xlnt::date>(); // 输出日-月-年格式 std::string vdates_eu = vdate.format("%d-%m-%Y"); // 输出月/日/年格式 std::string vdates_us = vdate.format("%m/%d/%Y"); // 输出带完整月份名的格式,比如"May 20, 2024" std::string vdates_long = vdate.format("%B %d, %Y");这里的格式占位符和常见的标准日期格式化规则一致:
%Y代表四位年份,%m是两位月份,%d是两位日期,%B是完整月份名称,%b是月份缩写。
用这两种方式编写代码,编译器就能正确找到对应的成员函数完成转换,不会再出现之前的编译错误了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

