Boost date time使用

  • 1:boost date类
  • 2:boost timer类
    • timer类
    • progress_timer类
    • progress_display类
    • 示例代码
  • 3:boost ptime类
    • 初始化ptime类
    • ptime类和time_t / tm的转换
    • ptime转换成字符串
    • 示例代码

1:boost date类

1: 初始化为指定年月日的日期(例如2019年6月6日)

 date d1(2019, 1, 1);/*2019年1月1日*/date d2 = from_string("2019-2-2");/*2019年2月2日*/date d3 = from_string("2019/3/3");/*2019年3月3日*/date d4 = from_undelimited_string("20190404");/*2019年4月4日*/

2: 初始化为当前日期,调用获取本地日期或者GMT日期的接口获取当前日期。

    date d5 = day_clock::local_day();/*本地日期,跟时区相关,北京时间为东八区*/date d6 = day_clock::universal_day();/*GMT日期*/

3: 转换成字符串

 cout << to_simple_string(d1) << endl;/*2019-Jan-01*/cout << to_iso_string(d2) << endl;/*20190202*/cout << to_iso_extended_string(d3) << endl;/*2019-03-03*/cout << d4 << endl;/*2019-Apr-04*/

4: 示例代码

/*boost 时间日期库,可定义时间点,时间段,时间长度,时间加减*/
void boost_test_date()
{date d1(2019, 1, 1);/*2019年1月1日*/date d2 = from_string("2019-2-2");/*2019年2月2日*/date d3 = from_string("2019/3/3");/*2019年3月3日*/date d4 = from_undelimited_string("20190404");/*2019年4月4日*/date d5 = day_clock::local_day();/*本地日期,跟时区相关,北京时间为东八区*/date d6 = day_clock::universal_day();/*GMT日期*/cout << to_simple_string(d1) << endl;/*2019-Jan-01*/cout << to_iso_string(d2) << endl;/*20190202*/cout << to_iso_extended_string(d3) << endl;/*2019-03-03*/cout << d4 << endl;/*2019-Apr-04*/cout << d5 << endl;/*2019-Jun-12*/cout << d6 << endl;/*2019-Jun-12*/
}

2:boost timer类

timer类

主要通过elapsed()函数获取从timer对象构造到elapsed函数调用时刻所经过的时间。

 timer t;cout << "elapsed_max :" << t.elapsed_max() / 3600 << "h" << endl;cout << "elapsed_min :" << t.elapsed_min() << "s" << endl;cout << "time elapsed:" << t.elapsed() << "s" << endl;/*打印自构造以来经过的时间*/

progress_timer类

progress_timer类析构的时候会打印出对象生存时间,如果在构造的时候传入输出流,打印信息将打印到传入的输出流,例如在{…}的代码范围内构造一个progress_timer对象,作用域结束时将打印出经过的时间。

 /*progress_timer对象析构时会打印出从构造到析构经过的时间*/stringstream ss;progress_timer tm;{/*构造函数中传入stringstream,析构的时候将输出定向到stringstream*/progress_timer tm_ss(ss);}cout << ss.str();

progress_display类

在命令行显示出进度条,对progress_display对象pd进行++pd操作可以更新进度条进度

 std::vector<string> vec;vec.push_back("1"); vec.push_back("2"); vec.push_back("3"); vec.push_back("4");progress_display pd(vec.size());for (auto& x : vec)++pd;/*进度条调整进度*/

示例代码

#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/progress.hpp>
#include <iostream>
using namespace std;
using namespace boost;
void boost_test_timer()
{timer t;cout << "elapsed_max :" << t.elapsed_max() / 3600 << "h" << endl;cout << "elapsed_min :" << t.elapsed_min() << "s" << endl;cout << "time elapsed:" << t.elapsed() << "s" << endl;/*打印自构造以来经过的时间*/
}void boost_test_progress_timer()
{/*progress_timer对象析构时会打印出从构造到析构经过的时间*/stringstream ss;progress_timer tm;{/*构造函数中传入stringstream,析构的时候将输出定向到stringstream*/progress_timer tm_ss(ss);}cout << ss.str();
}void boost_test_progress_display()
{std::vector<string> vec;vec.push_back("1"); vec.push_back("2"); vec.push_back("3"); vec.push_back("4");progress_display pd(vec.size());for (auto& x : vec)++pd;/*进度条调整进度*/
}

3:boost ptime类

初始化ptime类

1:通过指定日期和时间间隔初始化

 time_duration td(2, 2, 2, 200);td = duration_from_string("2:2:2:200");/*2小时,2分钟,2秒钟,200微妙*/ptime t1(date(2019, 1, 1), td);/*2019年1月1日2时2分2秒,200微妙被忽略*/

2:从字符串中获取时间

 ptime t4 = from_iso_extended_string("2019-06-11T23:00:00.200000");/*从字符串中获取时间*/

3:从工厂类函数获取时间

 ptime t2 = second_clock::local_time();/*获取本地时间,与时区相关,北京时间为东八区*/ptime t3 = microsec_clock::universal_time();/*GMT时间*/

ptime类和time_t / tm的转换

1: ptime和time_t之间的转换

 time_t tt;tt = to_time_t(t3);/*将ptime转化成time_t类型*/ptime t6 = from_time_t(tt);/*将time_t转化为ptime*/

2: ptime和tm之间的转换

 tm t;t.tm_year = 119/*1900 + 119,从1900开始到目前时间点经过的年数*/;t.tm_mon = 1;/*从零开始计算,0为1月,1为2月*/t.tm_mday = 1; t.tm_hour = 20; t.tm_min = 20; t.tm_sec = 20;ptime t5 = ptime_from_tm(t);/*将tm结构体(年月日时分秒)转化成ptime*/t = to_tm(t5);/*ptime转化成tm结构体*/

ptime转换成字符串

 cout << to_simple_string(t1) << endl;/*2019-Jan-01 02:02:02.200000*/cout << to_iso_string(t2) << endl;/*20190611T230630*/cout << to_iso_extended_string(t3) << endl;/*2019-06-11T15:06:30.422962*/cout << t4 << endl;/*2019-Jun-11 23:00:00.200000*/cout << t5 << endl;/*2019-Feb-01 20:20:20*/cout << to_tm(t1).tm_hour << endl;/*2*/cout << to_time_t(t1) << endl;/*1546308122*/

示例代码

#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>
using namespace std;
using namespace boost;
using namespace boost::gregorian;
using namespace boost::posix_time;
void boost_test_time()
{time_duration td(2, 2, 2, 200);td = duration_from_string("2:2:2:200");/*2小时,2分钟,2秒钟,200微妙*/ptime t1(date(2019, 1, 1), td);/*2019年1月1日2时2分2秒,200微妙被忽略*/ptime t4 = from_iso_extended_string("2019-06-11T23:00:00.200000");/*从字符串中获取时间*/ptime t2 = second_clock::local_time();/*获取本地时间,与时区相关,北京时间为东八区*/ptime t3 = microsec_clock::universal_time();/*GMT时间*/tm t;t.tm_year = 119/*1900 + 119,从1900开始到目前时间点经过的年数*/;t.tm_mon = 1;/*从零开始计算,0为1月,1为2月*/t.tm_mday = 1; t.tm_hour = 20; t.tm_min = 20; t.tm_sec = 20;ptime t5 = ptime_from_tm(t);/*将tm结构体(年月日时分秒)转化成ptime*/t = to_tm(t5);/*ptime转化成tm结构体*/time_t tt;tt = to_time_t(t3);/*将ptime转化成time_t类型*/ptime t6 = from_time_t(tt);/*将time_t转化为ptime*/cout << to_simple_string(t1) << endl;/*2019-Jan-01 02:02:02.200000*/cout << to_iso_string(t2) << endl;/*20190611T230630*/cout << to_iso_extended_string(t3) << endl;/*2019-06-11T15:06:30.422962*/cout << t4 << endl;/*2019-Jun-11 23:00:00.200000*/cout << t5 << endl;/*2019-Feb-01 20:20:20*/cout << to_tm(t1).tm_hour << endl;/*2*/cout << to_time_t(t1) << endl;/*1546308122*/
}

boost库学习之时间日期相关推荐

  1. Boost库学习笔记(二)算法模块-C++11标准

    Boost库学习笔记(二)算法模块-C++11标准 一.综述 Boost.Algorithm是一系列人通用推荐算法的集合,虽然有用的通用算法很多,但是为了保证质量和体积,并不会将太多通用算法通过审查测 ...

  2. Boost库学习笔记(一)安装与配置

    Boost库学习笔记(一)安装与配置 1. 获取boost https://www.boost.org/users/history/version_1_79_0.html 任选其一 boost的目录结 ...

  3. Boost库学习の时间日期处理

    记录一下Boost程序库的学习 系统:win11下WSL2,ubuntu子系统 安装Boost程序库 sudo apt-get install libboost-dev 安装好了以后就可以在/usr/ ...

  4. boost库学习入门篇

    学习及使用Boost库已经有一段时间了,Boost为我的日常开发中带来了极大的方便,也使得我越来越依赖于boost库了.但boost功能太多,每次使用还是得翻看以前的 资料,所以为了以后可以更方便的使 ...

  5. Boost库学习(0)

    2019独角兽企业重金招聘Python工程师标准>>> 最近看了C++11标准,感觉C++的变得更强大了,连语法都有了点变化.(最后一次用C++可能还是在学校时,工作中一直用的是C, ...

  6. c++ boost库学习boost::any用法

    一.boost::any 基本知识 1.1 boost::any() 作用:是定义一个变量来存放任意类型的数据,它类似于比如像纯面向对象语言java或.net中的Object类型. Boost::An ...

  7. boost库学习随记五 Boost.Locale 之字符转换 gbk utf8 big5 string wstring等

    Boost.Locale是一个库,它提供高质量的本地化的设施在C + +的方式.它最初是设计的一部分CppCMS - C + +的Web框架的项目,然后促成了提升. Boost.Locale提供强大的 ...

  8. Boost库学习笔记(4)—— Signals2

    一.概述 Boost.Signals2库一个信号和槽管理系统的实现.信号表示带有多个目标的回调,在类似的系统中也成为发布者或者事件.信号被连接到一些槽上,这些槽是回调接收者(也成为事件目标或者订阅方) ...

  9. boost库学习④:boost::asio::buffer

    asio::buffer常用的构造方法 字符数组 char d1[128]; size_t bytes_transferred = socket.receive(boost::asio::buffer ...

最新文章

  1. 喵哈哈村的狼人杀大战(4)
  2. 06day 03cdbpdb也成为 多租户环境
  3. iOS开发网络篇—数据缓存
  4. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
  5. mvc:annotation-driven/
  6. Symbian编程总结-图形图像篇-直接屏幕访问
  7. 配置DNS辅助服务器:DNS系列之四
  8. 基本数据类型与字符串的转换
  9. Netflix正在搞的混沌工程到底是什么?终于有人讲明白了
  10. 软件项目管理 第七章 进度计划
  11. Delphi利用字符串序列号对象
  12. 视频解析接口公众号对接教程
  13. 密码库LibTomCrypt学习记录——(2.13)分组密码算法的工作模式——CCM加密认证模式
  14. 37岁被裁员,大公司不愿要,无奈去小公司面试,HR的话扎心了
  15. 图 2021-01-16
  16. 墙裂推荐 Anaconda | 安利 Python IDE
  17. java jtextarea 事件_JTextArea的事件处理2
  18. 【PC】完美解决 office2010 错误1920 未能启动服务 “Office Software Protection Platform”(osppsvc)
  19. 锐捷AP下电脑突然获取不到IP地址,不能正常上网
  20. Docker 架构详解 - 每天5分钟玩转容器技术(7)

热门文章

  1. C# 转账到个人支付宝
  2. Oracle # 连接本地ORCL数据库
  3. 微信小程序卖货收费吗?企业公司商家要知道的
  4. delphi10进制转换成16进制
  5. TensorFlow保姆级别教入门,不会就把我头打爆
  6. 惠普1139一体打印机如何联网打印_连接您的HP无线打印机 | 无线打印中心 | 惠普中国...
  7. forms builder (10g)配置之SysFader:iexplorer.exe应用程序错误
  8. android开发--仿微信朋友圈界面
  9. 【剧前爆米花--爪哇岛寻宝】MySQL中索引和事务
  10. DEP是数据交换协议的意思