如何使用 boost::gregorian 来解析 2 位数的年份C++
How can I use boost::gregorian to parse 2-digit years in C++?
Boost 中的 boost::gregorian::from_*string() 解析函数似乎只处理 4 位数的年份(导致 2 位数年份的运行时错误)。
使用 boost::gregorian::from_*string() 函数处理 2 位数年份的最干净方法是什么?
一种可能性是结合添加 2000 或 1900 的编程规则对日期字符串进行一些预处理以清理日期格式,但我不想重新发明轮子并添加太多代码如果有更好的方法可以做到这一点。
看起来 boost 不支持这种格式。幸运的是,解析日期格式是单行的。下面是一个用AXE编写的解析器,我相信你可以用Spirit编写类似的代码。
using namespace boost::gregorian;
using namespace axe::shortcuts;
unsigned year, month, day;
auto date_rule = _uint >> year > '/' > _uint >> month > '/' > _uint >> day > _z;
std::string date_string("99/01/22");
if(date_rule(date_string.begin(), date_string.end()).matched)
{
date d(year < 100 ? year + 1900 : year, month, day);
// etc.
}
Boost.DateTime 无法做到这一点——文档说有一个与你想要的行为相匹配的%C
格式标志,但它只能用于输出,不能用于输入,即使这样也只能在有限的平台上使用。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在boost beast http请求中设置http头
- Boost Spirit,获取迭代器内部语义动作
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 使用Boost Interprocess创建托管共享内存需要很长时间
- Boost::posix_time::ptime舍入到给定的分钟数
- boost xml parsingl将xml的路径作为变量发送