boost::posix_time::ptime
构造
ptime(date,time_duration) 从一个日期和时间偏移进行构造
ptime t1(date(2002,Jan,10),
time_duration(1,2,3));
ptime t2(date(2002,Jan,10),
hours(1)+nanosec(5));
ptime(ptime) 复制构造函数
ptime t3(t1);
ptime(special_values sv) 无限时间,无效时间,最大时间和最小时间的构造函数
ptime d1(neg_infin);
ptime d2(pos_infin);
ptime d3(not_a_date_time);
ptime d4(max_date_time);
ptime d5(min_date_time);
ptime; 缺省构造函数
ptime p;
从字符串构造
ptime time_from_string(std::string) 从带分隔字符串进行构造
std::string ts("2002-01-20 23:59:59.000");
ptime t(time_from_string(ts));
ptime from_iso_string(std::string) 从不带分隔的字符串构造
std::string ts("20020131T235959");
ptime t(from_iso_string(ts));
从时钟构造
ptime second_clock::local_time() 取得本地时间,秒级精度,基于计算机的时区设置
ptime t(second_clock::local_time());
ptime second_clock::universal_time() 取得UTC时间
ptime t(second_clock::universal_time());
ptime microsec_clock::local_time() 使用次秒级精度的时钟取得本地时间
ptime t(microsec_clock::local_time());
ptime microsec_clock::universal_time() 使用次级精度的时钟取得UTC时间
ptime t(microsec_clock::universal_time());
使用转换函数进行构造
ptime from_time_t(time_t t); 将time_t转换为ptime
ptime t = from_time_t(tt);
ptime from_ftime<ptime>(FILETIME ft); 从FILETIME结构创建ptime对象
ptime t = from_ftime<ptime>(ft);
访问器
date date() 取出时间的日期部分
date d(2002,Jan,10);
ptime t(d, hour(1));
t.date() --> 2002-Jan-10;
time_duration time_of_day() 取出一天中的时间偏移
date d(2002,Jan,10);
ptime t(d, hour(1));
t.time_of_day() --> 01:00:00;
bool is_infinity() const 返回true 如果ptime是正的或负的无限
ptime pt(pos_infin);
pt.is_infinity(); // --> true
bool is_neg_infinity() const 返回true如果ptime为负无限ptime pt(neg_infin); pt.is_neg_infinity(); // --> true
bool is_pos_infinity() const 返回true如果ptime为正无限ptime pt(neg_infin); pt.is_pos_infinity(); // --> true
bool is_not_a_date_time() const 返回true 如果其值不是一个ptimeptime pt(not_a_date_time); pt.is_not_a_date_time(); // --> true
bool is_special() const 返回true如果ptime为某个special_value
转换为字符串ptime pt(pos_infin); ptime pt2(not_a_date_time); ptime pt3(date(2005,Mar,1), hours(10)); pt.is_special(); // --> true pt2.is_special(); // --> true pt3.is_special(); // --> false
std::string to_simple_string(ptime) 转换为YYYY-mmm-DD HH:MM:SS.fffffffff
字符串,其中mmm
为3字符月份名。秒的小数部分份在非零时包含。2002-Jan-01 10:00:01.123456789;
std::string to_iso_string(ptime) 转换为YYYYMMDDTHHMMSS,fffffffff
其中T
为日期-时间分隔符。20020131T100001,123456789
std::string to_iso_extended_string(ptime) 转换为YYYY-MM-DDTHH:MM:SS,fffffffff
其中T
为日期-时间分隔符。操作符2002-01-31T10:00:01,123456789
operator<<, operator>>ptime pt(not_a_date_time); stringstream ss("2002-Jan-01 14:23:11"); ss >> pt; std::cout << pt; // "2002-Jan-01 14:23:11"
operator==, operator!=, operator>, operator<, operator>=, operator<= 完整的比较操作符t1 == t2;
ptime operator+(days) 返回加上日子偏移后的 ptimedate d(2002,Jan,1); ptime t(d,minutes(5)); days dd(1); ptime t2 = t + dd;
ptime operator-(days) 返回減去日子偏移后的 ptimedate d(2002,Jan,1); ptime t(d,minutes(5)); days dd(1); ptime t2 = t - dd;
ptime operator+(time_duration) 返回加上时间长度后的 ptimedate d(2002,Jan,1); ptime t(d,minutes(5)); ptime t2 = t + hours(1) + minutes(2);
ptime operator-(time_duration) 返回減去时间长度后的 ptimedate d(2002,Jan,1); ptime t(d,minutes(5)); ptime t2 = t - minutes(2);
time_duration operator-(ptime) 获得两个时间之间的差距时间长度date d(2002,Jan,1); ptime t1(d,minutes(5)); ptime t2(d,seconds(5)); time_duration t3 = t2 - t1;//结果为负
类boost::posix_time::time_duration是负责表示时间长度的基本类型,时间长度可正可负。通常time_duration类提供一个带有小时,分,秒的计数的构造函数。using namespace boost::posix_time; time_duration td(1,2,3,4); //01:02:03.000000004 如果分辨率为纳秒 time_duration td(1,2,3,4); //01:02:03.000004 如果分辨率为微秒
构造using namespace boost::posix_time; time_duration td = hours(1) + seconds(10); //01:00:10 td = hours(1) + nanoseconds(5); //01:00:00.000000005
time_duration(hours,minutes,seconds,fractional_seconds)从计数值构造一个时间长度基于计数值的构造time_duration td(1,2,3,9); //1 小時 2 分 3 秒 9 納秒 time_duration td2(1,2,3,123456789); time_duration td3(1,2,3,1000); // 對於微秒分辨率(6位) // td2 => "01:04:06.456789" // td3 => "01:02:03.001000" // 對於納秒分辨率(9位) // td2 => "01:02:03.123456789" // td3 => "01:02:03.000001000"
hours(long) 小时数time_duration td = hours(3);
minutes(long) 分钟数time_duration td = minutes(3);
seconds(long) 秒数time_duration td = seconds(3);
milliseconds(long) 毫秒数time_duration td = milliseconds(3);
microseconds(long) 微秒数time_duration td = microseconds(3);
nanoseconds(long) 纳秒数从字符串构造time_duration td = nanoseconds(3);
time_duration duration_from_string(std::string) 从带有分隔符的字符串构造 注:秒数中越界的小数部分将被截断如:"1:02:03.123456999" => 1:02:03.123456访问器std::string ts("23:59:59.000"); time_duration td(duration_from_string(ts));
long hours() 取出规格化的小时数time_duration td(1,2,3); time_duration neg_td(-1,2,3); td.hours(); // --> 1 neg_td.hours(); // --> -1
long minutes()time_duration td(1,2,3); time_duration neg_td(-1,2,3); td.minutes(); // --> 2 neg_td.minutes(); // --> -2
long seconds()time_duration td(1,2,3); time_duration neg_td(-1,2,3); td.seconds(); // --> 3 neg_td.seconds(); // --> -3
long total_seconds()time_duration td(1,2,3,10); td.total_seconds(); // --> (1*3600) + (2*60) + 3 == 3723
long total_milliseconds()转换为字符串time_duration td(1,2,3,123456789); td.total_milliseconds(); // HMS --> (1*3600) + (2*60) + 3 == 3723 秒 // 毫秒是3位數字 // (3723 * 1000) + 123 == 3723123
std::string to_simple_string(time_duration) 转换为HH:MM:SS.fffffffff
10:00:01.123456789std::string to_iso_string(time_duration)转换为操作符HHMMSS,fffffffff
.100001,123456789operator<<, operator>>time_duration td(0,0,0); stringstream ss("14:23:11.345678"); ss >> td; std::cout << td; // "14:23:11.345678"
operator==, operator!=, operator>, operator<, operator>=, operator<=dd1 == dd2;
time_duration operator+(time_duration) 加上时间长度time_duration td1(hours(1)+minutes(2)); time_duration td2(seconds(10)); time_duration td3 = td1 + td2;
time_duration operator-(time_duration) 减去时间长度time_duration td1(hours(1)+nanoseconds(2)); time_duration td2 = td1 - minutes(1);
time_duration operator/(int) 用整数值 去除以时间长度,忽略余数hours(3)/2 == time_duration(1,30,0); nanosecond(3)/2 == nanosecond(1);
time_duration operator*(int) 用整数值乘以时间长度hours(3)*2 == hours(6);