2013-06-19 44 views
1

我试过的std :: string转换成的boost ::公历日期::这样:的boost ::阳历::从STD日期:: string的

#include <iostream> 
#include "boost/date_time/gregorian/gregorian.hpp" 

int main(int argc, char *argv[]) 
{ 
    std::string s_date = "1922-02-29"; 
    std::stringstream ss(s_date); 
    boost::gregorian::date_input_facet *df = new boost::gregorian::date_input_facet("%Y-%m-%d"); 
    ss.imbue(std::locale(ss.getloc(), df)); 
    date d; 
    ss>>d; 
    std::cout<<d<<std::endl; 
} 

但不幸的是我只收到“一事─一个最新的时间”。我做错了什么?有没有更容易的方法来将字符串转换为这种流行的形式来提升:: gregorian:date?

回答

6

我在做什么这样错了?

你会得到“不是日期时间”,因为那不是一个有效的日期:1922年不是闰年,所以二月只有28天。

如果我将其更改为有效日期,例如1922-02-281924-02-29,我的预期代码就能正常工作。

有没有更简单的方法来将字符串以这种流行的形式转换为boost :: gregorian:date?

boost::gregorian::date d = boost::gregorian::from_string(s_date); 
+0

明显的答案。我从文件中得到格式不正确的日期,并且没有事件认为这个问题可能与我的代码相关。我想你有boost :: gregorian :: from_string在脑海中。 – Dejwi

2

它应该是:

boost::gregorian::date d = boost::gregorian::from_undelimited_string(s_date); 

不是 'FROM_DATE'

字符串必须采取的形式YYYYMMDD。

或者你可以使用:

boost::gregorian::date d = boost::gregorian::from_string(s_date); 

在您的字符串采用的形式YYYY/MM/DD

相关问题