当前位置: 首页 > news >正文

【BOOST程序库】时间日期库

基本概念这里不再浪费时间介绍了,这里给出时间日期库的常见使用方法:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <boost/version.hpp>
#include <boost/config.hpp>//时间库:
#include <boost/timer.hpp>          //timeer计时器
#include <boost/progress.hpp>   //progress_timer计时器#include <boost/date_time/gregorian/gregorian.hpp>   //日期库
#include <boost/date_time/posix_time/posix_time.hpp>int main() {/**********************************测试代码*************************************************std::cout << BOOST_VERSION << std::endl;std::cout << BOOST_LIB_VERSION << std::endl;std::cout << BOOST_PLATFORM << std::endl;std::cout << BOOST_COMPILER << std::endl;std::cout << BOOST_STDLIB << std::endl;*///**********************************timer计时器*************************************************boost::timer TimeObj;      //声明计时器,声明对象的同时开始计时std::cout << TimeObj.elapsed_max() << std::endl;    //计时器的最大时间长度,单位是小时std::cout << TimeObj.elapsed_min() << std::endl;      //计时器的最小时间长度,单位是秒std::cout << TimeObj.elapsed() << std::endl;        //计时器从声明开始,到当前的运行时间(这里可以使用单步调试的方式查看时间)TimeObj.restart();std::cout << TimeObj.elapsed() << std::endl;//**********************************progress_timer计时器*************************************************//boost::progress_timer TimeObj2;//这里其他方法和timer计时器一样,不同点:析构的时候,会自动打印出计时//**********************************日期*************************************************boost::gregorian::date DateObj1(2023, 8, 15);boost::gregorian::date DateObj2(2023, boost::gregorian::Jan, 6);boost::gregorian::date DateObj3(DateObj1);//输出方法:std::cout << DateObj1 << std::endl;    //可以直接输出:2023-Aug-15printf("%d-%d-%d\n", DateObj1.year(), DateObj1.month(), DateObj1.day());        //2023-8-15char buffer[_MAX_PATH];memset(buffer, 0, _MAX_PATH);sprintf(buffer, "%d-%d-%d", DateObj1.year(), DateObj1.month(), DateObj1.day());std::cout << buffer << std::endl;//YYYY-MMM-DD 形式:2023-Aug-15std::string a = boost::gregorian::to_simple_string(DateObj1);std::cout << a << std::endl;//YYYYMMDD 形式:20230815std::string b = boost::gregorian::to_iso_string(DateObj1);std::cout << b << std::endl;//YYYY-MM-DD 形式:2023-08-15std::string c = boost::gregorian::to_iso_extended_string(DateObj1);std::cout << c << std::endl;//tm结构体:/*struct tm{int tm_sec;   // seconds after the minute - [0, 60] including leap secondint tm_min;   // minutes after the hour - [0, 59]int tm_hour;  // hours since midnight - [0, 23]int tm_mday;  // day of the month - [1, 31]int tm_mon;   // months since January - [0, 11]int tm_year;  // years since 1900int tm_wday;  // days since Sunday - [0, 6]int tm_yday;  // days since January 1 - [0, 365]int tm_isdst; // daylight savings time flag};*/tm ct = boost::gregorian::to_tm(DateObj1);std::cout << ct.tm_year << "-" << ct.tm_mon << "-" << ct.tm_mday << std::endl;//这里输出的年是从1900年开始算,经过了多长时间boost::gregorian::date d = boost::gregorian::date_from_tm(ct);std::cout << d << std::endl;std::string e = boost::gregorian::to_iso_extended_string(d);std::cout << e << std::endl;                          //2023-08-15//日期分开定义:boost::gregorian::days ds(11);        //定义天数:11std::cout << ds << std::endl;         //输出天数:11boost::gregorian::weeks ws(3);        //定义周数:3std::cout << ws << std::endl;         //输出周数,输出形式为以天数形式输出:21boost::gregorian::months ms(2);       //定义月数:2std::cout << ms.number_of_months() << std::endl;  //输出月数:2boost::gregorian::years ys(2);        //定义年数std::cout << ys.number_of_years() << std::endl;   //输出年数:2boost::gregorian::months mo(ms + ys);                //定义月数为:2年加2月std::cout << mo.number_of_months() << std::endl;     //输出月数:26//日期的基本算法(加减)boost::gregorian::date Obj(2023, 3, 25);     //定义一个时间:2023-03-25Obj -= boost::gregorian::months(2);          //日期减去月份(这里的月份不能直接写2,要以boost::gregorian::months(2)的形式来写std::cout << boost::gregorian::to_iso_extended_string(Obj) << std::endl;      // boost::gregorian::to_iso_extended_string的形式输出日期: 2023-1-25//日期的加法boost::gregorian::date_period dp(boost::gregorian::date(2022, 1, 1), boost::gregorian::days(15));   //定义一个时间区间:2023-1-01/2023-01-15std::cout << dp << std::endl;std::cout << dp.begin() << "\t" << dp.last() << "\t" << dp.end() << std::endl;                      //输出:2022-Jan-01   2022-Jan-15  2022-Jan-16  迭代器的end指向之后一个的下一个dp.shift(boost::gregorian::days(5));                                                                //将日期向后挪5天std::cout << dp.begin() << "\t" << dp.last() << "\t" << dp.end() << std::endl;                      //输出:2022-Jan-06   2022-Jan-20  2022-Jan-21dp.expand(boost::gregorian::days(5));                                                               //将日期前后加5天std::cout << dp.begin() << "\t" << dp.last() << "\t" << dp.end() << std::endl;                      //输出:2022-Jan-01   2022-Jan-25  2022-Jan-21//时间的判断(判断的是时间区间的头)//判断是否在某个时间之前:boost::gregorian::date_period().is_before方法if (dp.is_before(boost::gregorian::date(2022, 2, 2))) {std::cout << "before 2022-02-02" << std::endl;}else {std::cout << "no before 2022-02-02" << std::endl;}//判断是否在某个时间之后:boost::gregorian::date_period().is_before方法if (dp.is_after(boost::gregorian::date(2019, 12, 5))) {std::cout << "after 2019-12-05" << std::endl;}else {std::cout << "no after 2019-12-05" << std::endl;}//判断日期区间是否包含某个日期:boost::gregorian::date_period().contains方法if (dp.contains(boost::gregorian::date(2022, 2, 6))) {std::cout << "contains 2022-01-06" << std::endl;}else {std::cout << "no contains 2022-01-06" << std::endl;}//**********************************posix_time*************************************************//posix_time//1:10:30:001 1小时,10分钟,30秒,1毫秒boost::posix_time::time_duration timeObj = boost::posix_time::duration_from_string("1:30:10:0023");  //声明时间:01:30:10.002300std::cout << timeObj << std::endl;//时间的分开声明:boost::posix_time::hours ho(2);      //boost::posix_time::hours声明小时:2boost::posix_time::minutes mi(30);   //boost::posix_time::minutes声明分钟:30boost::posix_time::seconds se(25);   //boost::posix_time::seconds声明秒数:25boost::posix_time::millisec mill(56);//boost::posix_time::millisec声明毫秒:56//我们可以将分开的声明组合起来:boost::posix_time::ptime timeObj1(boost::gregorian::date(2022,2,15),ho + mi + se + mill);std::cout << timeObj1 << std::endl;   //输出:02:30:25.056000//日期时间合并:boost::posix_time::ptime pTimeObj(boost::gregorian::date(2023, 5, 26), boost::posix_time::hours(2) + boost::posix_time::minutes(32) + boost::posix_time::seconds(25) + boost::posix_time::millisec(56));std::cout << typeid(pTimeObj.date()).name() << std::endl;   boost::gregorian::date aaa = pTimeObj.date();    //pTempOnj.date()返回值类型:class boost::gregorian::datestd::cout << pTimeObj << std::endl;              //输出:2023-May-26 02:32:25.056000//输出格式://1. 可以直接输出:std::cout << pTimeObj << std::endl;             //2023-May-26 02:32:25.056000//2. YYYY-MMM-DD hh:mm:ss.mi形式:std::cout << boost::posix_time::to_simple_string(pTimeObj)<<std::endl;   //2023-May-26 02:32:25.056000//3. YYYYMMDD hhmmss.mi形式:std::cout << boost::posix_time::to_iso_string(pTimeObj) << std::endl;    //20230526T023225.056000//4. YYYY-MM-DDThh-mm-ss-mi形式:std::cout << boost::posix_time::to_iso_extended_string(pTimeObj) << std::endl;  //2023-05-26T02:32:25.056000//时间是区间声明:boost::posix_time::time_period tp(pTimeObj, boost::posix_time::hours(5));   //声明时间区间:[2023-May-26 02:32:25.056000/2023-May-26 07:32:25.055999]std::cout << tp << std::endl;//将日期向后挪:tp.shift(boost::posix_time::hours(1));std::cout << tp.begin() << "\t" << tp.last() << "\t" << tp.end() << std::endl;  //将日期向后挪1个小时,输出:2023-May-26 03:32:25.056000     2023-May-26 08:32:25.055999     2023-May-26 08:32:25.056000//将时间区间前后延长:tp.expand(boost::posix_time::hours(2));  std::cout << tp.begin() << "\t" << tp.last() << "\t" << tp.end() << std::endl;  //将时间前后都演唱2个小时,输出:2023-May-26 01:32:25.056000     2023-May-26 10:32:25.055999     2023-May-26 10:32:25.056000//判断是否在某个时间之前:if (tp.is_before(timeObj1)) {std::cout << tp << "is before " <<" " << timeObj1 << std::endl;}else {std::cout << tp << "no before" <<" " << timeObj1 << std::endl;}//判断是否在某个时间之后:if (tp.is_after(timeObj1)) {std::cout << tp << "is after " << " " << timeObj1 << std::endl;}else {std::cout << tp << "no after" << " " << timeObj1 << std::endl;}//判断是否包含某个日期:if (tp.contains(timeObj1)) {std::cout << tp << "is contain " << " " << timeObj1 << std::endl;}else {std::cout << tp << "is contain " << " " << timeObj1 << std::endl;}return 0;
}

运行截图:
日期与时间库运行截图
如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!

http://www.lryc.cn/news/95658.html

相关文章:

  • Windows 命令提示符 (cmd. exe) 命令行字符串长度限制
  • Kafka 入门到起飞系列
  • [RabbitMQ] RabbitMQ简单概述,用法和交换机模型
  • Oracle 多条记录根据某个字段获取相邻两条数据间的间隔天数,小于31天的记录都筛选出来
  • 【数据挖掘】如何修复时序分析缺少的日期
  • CDN、P2P、PCDN的区别是什么
  • MYSQL练习一答案
  • 路由器(第二十五课)
  • 物联网网关模块可以带几台plc设备吗?可以接几个modbus设备?
  • SpringBoot中间件—ORM(Mybatis)框架实现
  • 结构化思维:高效能项目经理人的底层能力
  • Pytorch个人学习记录总结 07
  • vue3+ts+elementui-plus二次封装树形表格
  • 机器学习/深度学习常见算法实现(秋招版)
  • 京东技术专家首推:Spring 微服务架构设计,GitHub 星标 128K
  • R语言--森林图制作
  • Tomcat中利用war包部署
  • [JAVAee]线程安全
  • ELK环境搭建——概况
  • 面试知识点整理
  • 腾讯云服务器CVM计算型c6/c5实例CPU型号、处理器主频大全
  • vue3笔记-脚手架篇
  • 数字的补数
  • Taskfile demo
  • MyBatis学习笔记之高级映射及延迟加载
  • 小程序如何删除/上架/下架商品
  • Failed to load local font resource:微信小程序加载第三方字体
  • 使用fastjson错误
  • 【GitOps系列】使用Kustomize和Helm定义应用配置
  • Android kotlin高阶函数与Java lambda表达式介绍与实战