在C ++中,以这种格式将日期添加到日期的最简单方法是什么:
“20090629-05:57:43”
可能使用Boost 1.36 - Boost::date
,Boost::posix_date
或任何其他提升或std
库功能,我对其他库不感兴趣。
到目前为止,我提出了:
将字符串格式化(将日期和时间部分分割为字符串op)以便能够初始化boost::gregorian::date
,日期需要格式如下:
“2009-06-29 05:57:43”
我有
“20090629-05:57:43”
添加一天(提升date_duration
内容)
to_simple_string
并附加时间部分(字符串操作)有没有更容易/更轻松的方法呢?
我正在考虑运行时效率。
上述步骤的示例代码:
using namespace boost::gregorian;
string orig("20090629-05:57:43");
string dday(orig.substr(0,8));
string dtime(orig.substr(8));
date d(from_undelimited_string(dday));
date_duration dd(1);
d += dd;
string result(to_iso_string(d) + dtime);
结果:
20090630-05:57:43
答案 0 :(得分:1)
这非常接近我所知道的最简单的方法。关于进一步简化它的唯一方法是使用facet作为I / O的东西,以消除字符串操作的需要:
#include <iostream>
#include <sstream>
#include <locale>
#include <boost/date_time.hpp>
using namespace boost::local_time;
int main() {
std::stringstream ss;
local_time_facet* output_facet = new local_time_facet();
local_time_input_facet* input_facet = new local_time_input_facet();
ss.imbue(std::locale(std::locale::classic(), output_facet));
ss.imbue(std::locale(ss.getloc(), input_facet));
local_date_time ldt(not_a_date_time);
input_facet->format("%Y%m%d-%H:%M:%S");
ss.str("20090629-05:57:43");
ss >> ldt;
output_facet->format("%Y%m%d-%H:%M:%S");
ss.str(std::string());
ss << ldt;
std::cout << ss.str() << std::endl;
}
然而,这更长,也可能更难理解。我没有试图证明这一点,但我怀疑这将是相同的运行时效率。