Posix时间

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 如果其值不是一个ptime
ptime 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)  返回加上日子偏移后的 ptime
date d(2002,Jan,1);
ptime t(d,minutes(5));
days dd(1);
ptime t2 = t + dd;
ptime operator-(days)  返回減去日子偏移后的 ptime
date d(2002,Jan,1);
ptime t(d,minutes(5));
days dd(1);
ptime t2 = t - dd;
ptime operator+(time_duration)  返回加上时间长度后的 ptime
date d(2002,Jan,1);
ptime t(d,minutes(5));
ptime t2 = t + hours(1) + minutes(2);
ptime operator-(time_duration)  返回減去时间长度后的 ptime
date 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.123456789
std::string to_iso_string(time_duration)转换为HHMMSS,fffffffff. 
100001,123456789
操作符
operator<<, 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);








































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值