2013-06-19 49 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

相關問題