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

时间:2011-08-23 14:16:00

标签: c++ boost time

Boost有几个函数转换为here描述的其他字符串格式,但没有转换为必要的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;
 }

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

感谢任何帮助。提前谢谢。

3 个答案:

答案 0 :(得分:10)

boost有相当多才多艺的date/time 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();
}

逆转换:

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;
}

答案 1 :(得分:3)

 boost::gregorian::date d(boost::gregorian::day_clock::local_day());
  char date[10];
  sprintf ( date, "%d/%d/%d", static_cast<short>(d.month()), static_cast<short>(d.day()), static_cast<short>(d.year()) );

答案 2 :(得分:1)

更好的选择是使用std :: stringstream并分别输出日期的月,日和年数字,并在自己之间添加斜杠。