/************************************************************************/
/* C++ Library */
/************************************************************************/
#include <iostream>
#include <vector>
/************************************************************************/
/* timer and date_time */
/************************************************************************/
#include "boost/timer.hpp"
#include "boost/progress.hpp"
#include "boost/date_time/gregorian/gregorian.hpp"
#include "boost/date_time/posix_time/posix_time.hpp"
using namespace boost;
using namespace std;
int main(void)
{
/************************************************************************/
/* timer库 */
/************************************************************************/
// 单位:s
timer tr;
cout << "Max timespan: " << tr.elapsed_max() << endl;
cout << "Min timespan: " << tr.elapsed_min() << endl;
cout << "Now time elapsed: " << tr.elapsed() << endl;
{
cout << "progress_timer start" << endl;
progress_timer p_tr;
//cout << "Now progress_time elapsed: " << p_tr.elapsed() << endl;
cout << "progress_timer end" << endl;
}
vector<int> v;
; i++)
{
v.push_back(i);
}
progress_display p_ds(v.size());
vector<int>::iterator pos;
for(pos = v.begin(); pos != v.end(); pos++)
{
// do something
++p_ds;
}
/************************************************************************/
/* date_time库 */
/************************************************************************/
// date
using namespace boost::gregorian;
// date可通过多种方式来构造,支持加减运算
date dt1; //一个无效的日期
);
date dt3();
date dt4(dt2);
assert(dt1 == date(not_a_date_time));
assert(dt4 == dt2);
assert(dt3 < dt2);
date dt = from_string("2017-03-15");
date dtt = from_undelimited_string("20170523");
date::ymd_type ymd = dtt.year_month_day();
assert(ymd.year == );
assert(ymd.month == );
assert(ymd.day = );
cout << dt2.year() << "-"
<< dt2.month() << "-"
<< dt2.day() << endl;
cout << dt.year() << "-"
<< dt.month() << "-"
<< dt.day() << endl;
cout << dtt.year() << "-"
<< dtt.month() << "-"
<< dtt.day() << endl;
cout << dtt << endl;
cout << to_simple_string(dtt) << endl;
cout << to_iso_string(dtt) << endl;
cout << to_iso_extended_string(dtt) << endl;
cout << dtt.day_of_week() << endl;
// 可以使用special_values来创建一些特殊的日期
date d1(pos_infin);
date d2(neg_infin);
date d3(not_a_date_time);
date d4(max_date_time);
date d5(min_date_time);
// 如果创建的日期对象使用了非法值,如超出了范围或使用了不正确的日期,就会抛出异常
try
{
date eDt();
}
catch (...)
{
//...
}
// day_clock
// day_clock是一个天级别的时钟,内部使用了C标准库的localtime()和gmtime()函数;
// 调用静态成员函数local_day()和universal_day()可当天的本地日期和UTC日期对象.
cout << day_clock::local_day() << endl;
cout << day_clock::universal_day() << endl;
// date 与 tm的转换
);
tm t = to_tm(date1);
date date2 = date_from_tm(t);
assert(date2 == date1);
// 日期长度date_duration 以天为单位的时长,有别名days
);
// 同时提供了另外三个时长类:years months weeks
);
assert(y.number_of_years() == );
months m();
assert(m.number_of_months() == );
weeks w();
assert(w.days() == );
// 日期区间 date_period
));
date_period dp2(date());
cout << dp1 << endl;
cout << dp2 << endl;
assert(dp1 < dp2);
// time
using namespace boost::posix_time;
// 时间长度 time_duration
); // hour,min,sec,fs
cout << td << endl;
// 时间点 ptime
using namespace boost::gregorian;
ptime pt(date()); // 2017年6月10日凌晨3时
ptime pt1 = time_from_string("2017-5-1 10:00:00");
ptime pt2 = from_iso_string("20170501T080000");
ptime pt3 = second_clock::local_time();
ptime pt4 = microsec_clock::universal_time();
cout << pt1 << endl;
cout << pt2 << endl;
cout << pt3 << endl;
cout << pt4 << endl;
cout << to_simple_string(pt) << endl;
cout << to_iso_string(pt) << endl;
cout << to_iso_extended_string(pt) << endl;
// 与tm time_t等结构的转换
tm tt = to_tm(pt);
// 时间时区 time_period
)); // 一个8小时的时区
// 除此之外,还有日期、时间迭代器
//date_iterator time_iterator
cout << (gregorian_calendar::is_leap_year() ? "Yes" : "no") << endl; // 闰年
); // 月末天
// 格式化时间
);
date_facet *pfacet = new date_facet("%Y年%m月%d日");
cout.imbue(locale(cout.getloc(), pfacet));
cout << ddtt << endl;
cin.get();
;
}