1. 概述
包含的头文件: #include <boost/date_time/posix_time/posix_time.hpp>
通常的命名空间: using namespace boost::posix_time;
2. 构造函数
跟date的构造函数一样, 都基本构造函数, 字符串构造, clock构造.
ptime还可以通过转换函数构造.
void test_ptime_construct() { using namespace boost::gregorian; using namespace boost::posix_time; // 1. 常规的构造函数有如下几种: ptime p0; // 最常用的构造方法 ptime p1(date(2012, 11, 30), time_duration(1, 2, 3)); // 2012-Nov-30 01:02:03 ptime p2(p1); // 复制构造 ptime ps1(neg_infin); ptime ps2(pos_infin); ptime ps3(not_a_date_time); ptime ps4(max_date_time); // 9999-Dec-31 ptime ps5(min_date_time); // 1400-Jan-01 // 2. 通过字符串构造 ptime pstr1(time_from_string("2012-11-30 23:59:59.000")); ptime pstr2(from_iso_string("20121130T200001")); // 3. 通过clock构造 ptime pc1(second_clock::local_time()); ptime pc2(second_clock::universal_time()); ptime pc3(microsec_clock::local_time()); ptime pc4(microsec_clock::universal_time()); // 4. 通过转换函数from_time_t和ptime_from_tm, // 注意: 这样通过from_time_t转换成ptime后, 好像是格林威治时间 time_t t1 = time(NULL); ptime pc5 = from_time_t(t1); std::cout << pc5 << std::endl; tm* t2 = localtime(&t1); ptime pc6 = ptime_from_tm(*t2); std::cout << pc6 << std::endl; }
3. 常用函数
可以换取日期, 时间, 秒的小数部分
void test_ptime_accessor() { using namespace boost::posix_time; using namespace boost::gregorian; // 获取日期部分 ptime pt(second_clock::local_time()); date d1 = pt.date(); // 获取时间部分 time_duration td = pt.time_of_day(); // 获取秒的小数部分 __int64 l = td.fractional_seconds(); std::cout << l << std::endl; }
4. 转换成字符串
备注:在用字符串构造ptime时应该特别注意字符串的前后不能有多余的空格,例如ptime pstr1(time_from_string("2012-11-30 23:59:59"));可以正常构造ptime.
但是ptime pstr1(time_from_string("2012-11-30 23:59:59 "));最后多一个空格的情况下将导致构造异常,程序异常终止,切记。