如何将boost :: gregorian :: date转换为mm/dd/yyyy格式,反之亦然?

Gri*_*yan 0 c++ time boost

Boost有几个函数转换为此处描述的其他字符串格式,但没有转换为必要的mm/dd/yyyy格式.目前我正在通过以下方式进行:

 std::string dateAsMMDDYYYY( const boost::gregorian::date& date )
 {
    std::string yyyymmdd = boost::gregorian::to_iso_string( date );
    std::string ret = yyyymmdd.substr(4,2) + "/" + yyyymmdd.substr(6,2) + "/" + yyyymmdd.substr(0,4);
    return ret;
 }
Run Code Online (Sandbox Code Playgroud)

即只是从返回的值中删除数字to_iso_string().这看起来很粗鲁,我正在寻找一种更优雅的方式来执行此转换.另外我需要一个关于如何执行向后转换的建议(即从'mm/dd/yyyy'字符串到boost :: gregorian :: date)

任何帮助表示赞赏.提前致谢.

Cub*_*bbi 11

boost具有相当多功能的日期/时间IO设施

const std::locale fmt(std::locale::classic(),
                      new boost::gregorian::date_facet("%m/%d/%Y"));
std::string dateAsMMDDYYYY( const boost::gregorian::date& date )
{
    std::ostringstream os;
    os.imbue(fmt);
    os << date;
    return os.str();
}
Run Code Online (Sandbox Code Playgroud)

逆转换:

const std::locale fmt2(std::locale::classic(),
                       new boost::gregorian::date_input_facet("%m/%d/%Y"));
boost::gregorian::date MMDDYYYYasDate( const std::string& str)
{
    std::istringstream is(str);
    is.imbue(fmt2);
    boost::gregorian::date date;
    is >> date;
    return date;
}
Run Code Online (Sandbox Code Playgroud)