2009-09-12 46 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; 
}