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)
感谢任何帮助。提前谢谢。
答案 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并分别输出日期的月,日和年数字,并在自己之间添加斜杠。