2009-09-12 81 views
5

我正在將現有程序轉換爲C++,並且需要操作Sybase時間戳。這些時間戳包含日期和時間信息,據我所知可以通過boost::posix_time::ptime變量最好地處理。在代碼中的一些地方,我需要從變量中獲取年份。從提高獲得年份ptime

我的問題是:我怎麼能最有效地從提升的ptime變量提取?下面是一個示例程序,其中需要三個代碼行,額外的ostringstream變量和boost::gregorian::date變量的開銷。

根據升壓文檔:

類的ptime取決於gregorian::date爲接口的時間點的 日期部分

gregorian::date但是似乎不是基類的ptime。不知何故,我在這裏失去了一些東西

難道沒有簡單的方法從ptime中提取年份嗎?

樣品:

#include <boost/date_time/local_time/local_time.hpp> 
#include <iostream> 

int main() 
{ 
    boost::posix_time::ptime t(boost::posix_time::second_clock::local_time()); 
    boost::gregorian::date d = t.date(); 
    std::ostringstream os; os << d.year(); 
    std::cout << os.str() << std::endl; 
    return 0; 
} 

回答

5

跳過ostringstream。否則,您可能會受益於「使用命名空間...」

#include <boost/date_time/local_time/local_time.hpp> 
#include <iostream> 

int main() 
{ 
    using namespace boost::posix_time; 
    std::cout << second_clock::local_time().date().year() << std::endl; 
    return 0; 
}