timer库提供简易的度量时间和进度显示功能。
boost的timer库有两个组件:timer使用的是标准C/C++库函数,cpu_timer使用操作系统的API精度更高。
timer库库包含三个小组件:timers计时器,progress_timer,进度指示器progress_display
timer
timer类是一个小型计时器,提供毫秒级别的计时精度。
#include <boost/timer.hpp>
....
timer t;
t.elapsed_max() //计时器能表示的最大值
t.elapsed_min() //计时器能表示的最小值
t.elapsed() //程序执行已经流逝的时间
timer对象一旦被声明,它的构造函数就会开始计时工作。timer的计时用到了<ctime>的std::clock()函数,此函数会返回自进程启动以来的clock数。
timer的精度依赖操作系统或编译器。适合要求不高的任务。不适合大跨度时间测量和跨平台。
progress_timer
progress_timer继承自timer,在析构时自动输出时间。progress_timer的默认输出是std::cout,可以在构造时指定输出流。
stringstream ss;
{
progress_timer t(ss);
}
progress_display
progress_display可以在控制台上显示程序的执行进度,且能提供一个友好的用户界面。构造函数接受一个进度基数。重载的+=和++用来增加技术,更新进度。
#include <boost/progress.hpp>
using namespace boost;
.....
vector<string> v(100);
progress_display pd(v.size());
for(auto& x : v )
{
cout<<x<<endl;
++pd;
}
date_time
date_time库包括两个部分,分别是处理日期的gregorian和处理时间的posix_time
#include<boost/date_time/gregorian/gregorian.hpp>
#include<boost/date_time/posix_time/posix_time.hpp>
- 处理日期
空的构造函数会创建一个值为not_a_date_time的无效日期。顺序传入年月日值则创建一个对应的date对象.
date d1; //not_a_date_time
date d2 (2010,1,1);
date d3 (2000,Jan,1);
date d4 (d2);
date d5 = from_string("1992-12-31");
assert(d1 == date(not_a_date_time));
assert(d2 == d4);
assert(d3 < d4);
day_clock是一个天级别的时钟,静态成员函数会返回一个当天的日期对象
cout<<day_clock::local_day() <<endl;
cout<<day_clock::universal_day() <<endl;
- 访问日期
date有返回年月日的成员函数
date d(2014,1,1);
assert(d.year() == 2014);
assert(d.month() == 4);
assert(d.day() == 1);
date:: ymd_type ymd = d.year_month_day()
//返回一个ymd对象
assert(ymd.date == 4)
- 日期输出
to_simple_string(date d);
- 转换为tm结构
date支持和c的tm结构相互转换
to_tm(date);
date_from_tm(tm);
- 日期长度
日期长度是度量时间长度的一个标量。
date_duration可以使用构造函数创建一个日期长度,成员函数days()返回时长的天数。
days dd1(255);
weeks w(3);
months m(5);
years y(2);
- 日期运算
date d1(2000,1,1);
d1 += days(10);
d1 -= years(10);
- 日期区间
date_period表示日期区间
date_period dp1(date(2014,1,1),days(20));
date_period dp2(date(2014,1,1),date(2013,1,1));
- 日期迭代器
date d(2006,11,26);
day_iterator d_iter(d);
++d_iter;
assert(d_iter == date(2006,11,27));
year_iterator y_iter(*d_iter);
++y_iter;
assert(y_iter->year() == 2014);
week_iterator
month_iterator
....
- 一个简单的使用
显示月历
date d(2019,4,2);
date d_start(d.year(),d.month(),1);
date d_end = d.end_of_month();
for(day_iterator d_iter(d_start); d_iter != d_end; ++d_iter)
{
cout<< *d_iter <<" "<<d_iter->day_of_week()<<endl;
}
处理时间
- 时间长度
time_duration精确到微秒,甚至纳秒
time_duration的构造函数指定时分秒微秒来构造,超出的时间会自动进位或借位。也支持四则运算
time_duration td(1,10,30,1000);
hours h(1);
minutes m (10);
seconds s(30);
milliseconds ms(1);
time_duration td2 = h+m+s+ms;
assert (td * 5 == td2 * 2);
- 时间点
创建ptime时同时指定date和time_duration,等一一个日期加当天时间偏移量.
ptime p(date(2014,6,8),hours(1));
ptime p1 = time_from_string("2014-6-8 01:00:00");
- 操作时间点对象
ptime = date+time_duration支持四则运算和字符串转换,还支持单向转换为tm/time_t结构
ptime p1 = from_time_t(std::time(0));
tm t = to_tm(p1);
- 时间迭代器
for(time_iterator t_iter(p, minutes(10)); t_iter < p + hours(1); ++ t_iter)
...
网友评论