博客转载自:

特点
缺点
说明
timer
计时基类
不适合大跨度时间
适用大部分的普通计时
progress_timer
继承自timer 可以自动写入流中
只精确到0.01s
如果需要更精确,可派生个类,调用stream的precision设置
progress_display 图形化显示进度 只能输出到cout 如果还有其他输出则会干扰进度显示。
折中的办法是重新显示 pd.restart(size); pd+= pNum;
date 日期结构,时间点 —— date是date_time库的核心类 boost::gregorian
date_duration days、months、years 时间段 —— 表示一段时间,可以把它看成一个int
date_period 标量,左开右闭,时间区间 —— 可以认为是一个有起点的date_duration。能做交集、并集
date_iterator 迭代器,以某个单位增减 —— 天、周、月、年四种迭代器,以某种增量移动。
time_duration 时间段 同date_duration —— hours、minutes、seconds、millisec、boost::posix_time
ptime 时间点 date+time_duration —— 分date()和time_of_day()操作。
time_period 时间区间 同date_period —— ——
time_iterator 迭代器,以某个单位增减 —— 可直接与ptime比较
date_facet 流格式化日期 —— %Y年%m月%d日
time_facet 流格式化时间 —— %Y年%m月%d日 %H点%M分%S%F秒
  1. #include <boost/timer.hpp>
  2. #include <boost/progress.hpp>
  3. #include <iostream>
  4. #include <sstream>
  5. #include <fstream>
  6. #include <string>
  7. #include <vector>
  8. #include <Windows.h>
  9.  
  10. #include <boost/date_time/gregorian/gregorian.hpp>
  11. #include <boost/date_time/posix_time/posix_time.hpp>
  12.  
  13. using namespace std;
  14.  
  15. int main()
  16. {
  17. boost::timer t;
  18. std::cout<<"Max "<<t.elapsed_max()<<endl;
  19. std::cout<<"Min "<<t.elapsed_min()<<endl;
  20. std::cout<<"elapsed: "<<t.elapsed()<<endl;
  21. t.restart();
  22. Sleep(100);
  23. std::cout<<"elapsed: "<<t.elapsed()<<endl;
  24. cout<<"---------------------------"<<endl;
  25. stringstream ss;
  26. {
  27. boost::progress_timer t(ss);
  28. Sleep(300);
  29. }
  30. cout<<ss.str();
  31. cout<<"---------------------------"<<endl;
  32.  
  33. vector<string> v(100);
  34. //Do Data Fill......
  35. ofstream fs("c:\test.txt");
  36.  
  37. boost::progress_display pd(v.size());
  38. vector<string>::iterator pos;
  39. for (pos = v.begin();pos != v.end();++pos)
  40. {
  41. fs<<*pos<<endl;
  42. Sleep(10);
  43. ++pd;
  44. //pd.restart(v.size());
  45. //pd+=(pos-v.begin() +1);
  46. }
  47. cout<<"---------------------------"<<endl;
  48.  
  49. {
  50. using namespace boost::gregorian;
  51. cout<<"----------------- date ------------------"<<endl;
  52. date d1;
  53. date d2(2013,4,7);
  54. date d3(2013,Apr,7);
  55. date d4(d2);
  56.  
  57. assert(d1 == date(not_a_date_time)); //默认初始化为无效日期
  58. assert(d2 == d4);
  59. assert(d3 == d2);
  60.  
  61. d1 = from_string("1999,9,9");
  62. date d5 (from_string("2008/8/8"));
  63. d3 = from_undelimited_string("20110111");
  64.  
  65. cout<<day_clock::local_day()<<endl;
  66. cout<<day_clock::universal_day()<<endl;
  67.  
  68. date d6 (neg_infin);
  69. date d7(pos_infin);
  70. cout<<d6<<endl;
  71. cout<<d7<<endl;
  72.  
  73. cout<<"---------------------------"<<endl;
  74. date today (2013,4,17);
  75. assert(today.year() == 2013);
  76. assert(today.month() == 4);
  77. assert(today.day() == 17);
  78.  
  79. date::ymd_type ymd = today.year_month_day();
  80. assert(ymd.year == 2013);
  81. assert(ymd.month == 4);
  82. assert(ymd.day == 17);
  83.  
  84. assert(today.day_of_week() == 3); //星期几 周日为0
  85. cout<<today.day_of_year()<<endl; //在一年中是第几天
  86. assert(today.end_of_month() == date(2013,4,30)); //当月的最后一天
  87. cout<<today.week_number()<<endl; //当年的第几周 范围0~53 年初的半周归为上一年,即53
  88. assert(d6.is_infinity()); //日期为无限日期
  89. assert(d6.is_neg_infinity());
  90. cout<<"---------------------------"<<endl;
  91.  
  92. cout<<to_simple_string(today)<<endl;
  93. cout<<to_iso_string(today)<<endl;
  94. cout<<to_iso_extended_string(today)<<endl; //常用日期格式YYYY-MM-DD
  95. cout<<today<<endl;
  96.  
  97. cout<<"---------------------------"<<endl;
  98. tm t = to_tm(today);
  99. assert(t.tm_hour == 0 && t.tm_min == 0);
  100.  
  101. date new_today = date_from_tm(t); //从tm转为date
  102. assert(new_today == today);
  103.  
  104. cout<<"-------------- days(date_duration) --------------"<<endl;
  105. days dd1(10),dd2(-20),dd3(365);
  106. assert(dd1>dd2 &&dd1<dd3);
  107. assert(dd1+dd2 == days(-10));
  108. assert((dd2+dd3).days() == 345);
  109. assert(dd3/5 == days(73));
  110.  
  111. weeks w(3); //3个星期
  112. assert(w.days() == 21);
  113.  
  114. months m(5);
  115. years y(2);
  116.  
  117. months m2 = y+m;
  118. assert(m2.number_of_months() == 29);
  119. assert((y*2).number_of_years() == 4);
  120.  
  121. cout<<"-------------- Calc --------------"<<endl;
  122. date dA(2000,1,1),dB(2008,8,8);
  123. cout<<dB-dA<<endl; //3142天
  124.  
  125. dA+=days(10);
  126. assert(dA.day() == 11);
  127. dA+=months(2);
  128. assert(dA.month() ==3 && dA.day()== 11);
  129.  
  130. dA-=weeks(1);
  131. assert(dA.day() == 4);
  132.  
  133. dB-=years(7);
  134. assert(dA.year() == dB.year()-1);
  135.  
  136. //如果日期是月末的最后一天,加减月或年会得到月末的时间,而不是简单的月、年加1
  137. date sp(2013,3,30);
  138. sp-=months(1);
  139. assert(sp.month() == 2 && sp.day() == 28);
  140. sp -=months(1);
  141. assert(sp.month()== 1 && sp.day()== 31);
  142. sp+=months(2);
  143. assert(sp.day() == 31); //与原来的日期已经不相等!
  144.  
  145. cout<<"-------------- date_period --------------"<<endl;
  146. date_period dp(date(2013,4,17),days(14)); //左开右闭与STL的容器相似
  147. assert(!dp.is_null());
  148. assert(dp.begin().day() == 17);
  149. assert(dp.last().day() == 30);
  150. assert(dp.end().day() == 1);
  151.  
  152. cout<<dp<<endl;
  153.  
  154. date_period new_dp = dp;
  155. new_dp.shift(days(3)); //将时间区间向后移动
  156. assert(new_dp.begin().day() == 20);
  157. assert(new_dp.length().days() == 14);
  158.  
  159. new_dp.expand(days(3)); //区间两段延长n天,即延长2n天。
  160. assert(new_dp.begin().day() == 17);
  161. assert(new_dp.length().days() == 20);
  162.  
  163. assert(dp.is_after(date(2013,1,1)));
  164. assert(dp.contains(date(2013,4,20)));
  165.  
  166. date_period dp2 (date(2013,4,17),days(5));
  167. assert(dp.contains(dp2));
  168.  
  169. assert(dp.intersects(dp2)); //交集
  170. assert(dp.intersection(dp2) == dp2);
  171.  
  172. date_period dp3 (date(2013,5,1),days(5));
  173. assert(!dp3.intersects(dp));
  174. assert(dp3.intersection(dp2).is_null());
  175.  
  176. assert(dp.is_adjacent(dp3));
  177.  
  178. date_period dp4(date(2013,4,17),days(19)); //并集
  179. assert(dp.merge(dp3).is_null()); //无交集返回空
  180. assert(dp.span(dp3) == dp4); //填充中间区域
  181.  
  182. cout<<"-------------- date_iterator --------------"<<endl;
  183. date last(2013,4,17);
  184.  
  185. day_iterator d_iter(last); //日期迭代器
  186.  
  187. assert(d_iter == last);
  188. ++d_iter;
  189. assert(d_iter == date(2013,4,18));
  190.  
  191. year_iterator y_iter(*d_iter,3); //增减步长为3
  192. assert(y_iter == last + days(1));
  193.  
  194. ++y_iter;
  195. assert(y_iter->year() == 2016);
  196.  
  197. cout<<"-------------- func --------------"<<endl;
  198. cout<<(gregorian_calendar::is_leap_year(2000)? "Yes":"no")<<endl; //闰年
  199. assert(gregorian_calendar::end_of_month_day(2013,2) == 28); //月末天
  200.  
  201. }
  202.  
  203. {
  204. using namespace boost::posix_time;
  205. cout<<"-------------- time_duration --------------"<<endl;
  206. time_duration td(1,1,1); //时、分、秒 会自动借、进位
  207. hours h0(1);
  208. minutes m(1);
  209. seconds s(1);
  210. millisec ms(1);
  211.  
  212. time_duration td2 = h0+m+s+ms;
  213. time_duration td3 = hours(2) + minutes(10);
  214. time_duration td4 = duration_from_string("1:10:10:300");
  215.  
  216. assert(td4.hours() == 1 && td4.minutes() == 10 && td4.seconds() == 10);
  217. assert(td.total_seconds() == 1*3600 + 1*60 +1); //转为sec
  218.  
  219. hours h(-10);
  220. assert(h.is_negative());
  221.  
  222. time_duration h2 = h.invert_sign(); //取反
  223. assert(!h2.is_negative() && h2.hours() == 10);
  224.  
  225. cout<<td3-td2<<endl;
  226. cout<<to_simple_string(td4)<<endl;
  227. cout<<to_iso_string(td4)<<endl;
  228.  
  229. cout<<"-------------- ptime --------------"<<endl;
  230. {
  231. using namespace boost::gregorian;
  232. ptime p(date(2013,4,17),hours(1)); //ptime相当于date+time_duration
  233. ptime p1 = time_from_string("2013-4-17 16:25:00");
  234. cout<<p<<endl;
  235. cout<<p1<<endl;
  236. ptime p2 = second_clock::local_time(); //常用时间输出
  237. ptime p3 = microsec_clock::universal_time(); //微秒精度
  238. cout<<p2<<endl<<p3<<endl;
  239.  
  240. ptime op(date(2013,4,17),hours(1)+minutes(30));
  241.  
  242. date d = op.date();
  243. time_duration optd = op.time_of_day();
  244. assert(d.day() == 17 && d.month() == 4);
  245. assert(optd.hours() == 1 && optd.minutes() == 30);
  246. cout<<to_iso_extended_string(op)<<endl;
  247.  
  248. tm t = to_tm(op); //不可逆,此处与date不同
  249. //只能用date_from_tm先得到日期,再填充时间。
  250.  
  251. cout<<"-------------- time_period --------------"<<endl;
  252. time_period tp1 (op,hours(8));
  253. time_period tp2(op+hours(8),hours(1));
  254. assert(tp1.end() == tp2.begin() && tp1.is_adjacent(tp2));
  255. assert(!tp1.intersects(tp2));
  256.  
  257. tp1.shift(hours(1));
  258. assert(tp1.is_after(op));
  259. assert(tp1.intersects(tp2));
  260.  
  261. tp2.expand(hours(10));
  262. assert(tp2.contains(op) && tp2.contains(tp1));
  263.  
  264. cout<<"-------------- time_iterator --------------"<<endl;
  265. for (time_iterator t_iter(op,minutes(10));t_iter<op+hours(1);++t_iter)
  266. {
  267. cout<<*t_iter<<endl;
  268. }
  269. cout<<"-------------- formate --------------"<<endl;
  270. date_facet* dfacet = new date_facet("%Y 年%m 月%d 日");
  271. cout.imbue(locale(cout.getloc(),dfacet));
  272. cout<<date(2013,4,17)<<endl;
  273.  
  274. time_facet* tfacet = new time_facet("%Y 年%m 月%d 日 %H点%M分%S%F秒");
  275. cout.imbue(locale(cout.getloc(),tfacet));
  276. cout<<op<<endl;
  277. }
  278. }
  279.  
  280. getchar();
  281. return 0;
  282. }

  

运行结果:

  1. Max 2.14748e+006
  2. Min 0.001
  3. elapsed: 0.001
  4. elapsed: 0.1
  5. ---------------------------
  6. 0.30 s
  7. ---------------------------
  8. % %
  9. |----|----|----|----|----|----|----|----|----|----|
  10. ***************************************************
  11. ---------------------------
  12. ----------------- date ------------------
  13. -Apr-
  14. -Apr-
  15. -infinity
  16. +infinity
  17. ---------------------------
  18.  
  19. ---------------------------
  20. -Apr-
  21.  
  22. --
  23. -Apr-
  24. ---------------------------
  25. -------------- days(date_duration) --------------
  26. -------------- Calc --------------
  27.  
  28. -------------- date_period --------------
  29. [-Apr-/-Apr-]
  30. -------------- date_iterator --------------
  31. -------------- func --------------
  32. Yes
  33. -------------- time_duration --------------
  34. ::58.999000
  35. ::10.300000
  36. 011010.300000
  37. -------------- ptime --------------
  38. -Apr- ::
  39. -Apr- ::
  40. -Apr- ::
  41. -Apr- ::21.870604
  42. --17T01::
  43. -------------- time_period --------------
  44. -------------- time_iterator --------------
  45. -Apr- ::
  46. -Apr- ::
  47. -Apr- ::
  48. -Apr- ::
  49. -Apr- ::
  50. -Apr- ::
  51. -------------- formate --------------
  52. 04 17
  53. 04 17 013000

boost 时间与日期处理的更多相关文章

  1. (一)boost库之日期、时间

    (一)boost库之日期.时间 一.计时器  计时器,通常在一个项目中统计一个函数的执行时间是非常实用的.   #include <boost/timer.hpp> void PrintU ...

  2. Android随笔之——Android时间、日期相关类和方法

    今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ...

  3. Lua库之时间和日期操作

    Lua库之时间和日期操作 (2010-02-07 18:41:20) 转载▼ os.time() <== 返回当前系统的日历时间os.date() <== 返回本地化的时间字符串,这里是& ...

  4. date 显示或设置系统时间和日期

    显示或设置系统时间和日期 date [options] [+format] date [options] [new date] date用来显示系统的时间和日期,超级用户可以使用date来更改系统时钟 ...

  5. java时间和日期类型

    在java中,代表时间和日期的类型包括:java.util.Date和java.util.Calendar,此外,在JDBC API中还提供了3个扩展类,java.UtilDate类的子类:java. ...

  6. iOS中的时间和日期

    怎么说?时间和日期不是了不起的属性.了不起的功能,但是,我们决不能够因此就“冷落”它. 一:怎么“搞到货”--如何获取时间.日期 //-=-==当前时间------默认显示“0时区”时间 NSDate ...

  7. Python 时间和日期模块的常用例子

    获取当前时间的两种方法 import datetime,time now = time.strftime("%Y-%m-%d %H:%M:%S") print now now = ...

  8. Java 对时间和日期的相关处理

    1. 获取当前系统时间和日期并格式化输出 import java.util.Date; import java.text.SimpleDateFormat; public class NowStrin ...

  9. PHP date 格式化一个本地时间/日期

    PHP date 格式化一个本地时间/日期 date (PHP 4, PHP 5) date — 格式化一个本地时间/日期 说明 string date ( string $format [, int ...

随机推荐

  1. 网络爬虫必备知识之requests库

    就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结对requests库的使用方法进行总结 1. ...

  2. 剑指offer-第三章高质量代码(反转链表)

    题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转链表的头节点. 思路:对一个链表反转需要三个指针操作来保证链表在反转的过程中保证不断链,给链表一个行动指针pNode,对pNode指向的节 ...

  3. tomcat启动报错:Bean name 'XXX' is already used in this <beans> element

    如题,tomcat容器启动时加载spring的bean,结果报错如下: 六月 28, 2017 9:02:25 上午 org.apache.tomcat.util.digester.SetProper ...

  4. java从键盘输入一组数据,输出其最大值,平均值,最小值没法输出

    总结::需要耐心,加思考.做事不思考,那就是白做徒劳!!!!! package com.aini; import java.util.Scanner; //操...为什么数组的大小比较我硬是搞不懂,比 ...

  5. mysql实战优化之三:表优化

    对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈.所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问. 如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理 ...

  6. java成神之——安全和密码

    安全和密码 加密算法 公钥和私钥加密解密 生成私钥和公钥 加密数据 解密数据 公钥私钥生成的不同算法 密钥签名 生成加密随机数 基本用法 指定算法 加密对象 SealedObject Signatur ...

  7. oracle中,约束、表名、Index等的名称长度限制最大只能30个字符

    oracle中,约束.表名.Index等的名称长度限制最大只能30个字符

  8. MongDB安装使用

    4.MongoDB 下载 MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https://www.m ...

  9. maven项目引入外部jar包的三种方式

    方式1:dependency 本地jar包 <dependency> <groupId>com.hope.cloud</groupId> <!--自定义--& ...

  10. DDD学习笔录——提炼问题域之有效提炼知识的模型(三)

    方式六:延迟对模型中概念的命名 对领域建模时命名很重要. 因为在不断的知识提炼过程中经常会发现已经被命名的概念与你最初理解的有出入,这时你当初的命名就会变成一个问题.其问题在于  最初选作名称的这个词 ...