【BOOST程序库】时间日期库

news2025/4/6 14:49:12

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

#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-15
	printf("%d-%d-%d\n", DateObj1.year(), DateObj1.month(), DateObj1.day());        //2023-8-15
	char 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-15
	std::string a = boost::gregorian::to_simple_string(DateObj1);
	std::cout << a << std::endl;
	//YYYYMMDD 形式:20230815
	std::string b = boost::gregorian::to_iso_string(DateObj1);
	std::cout << b << std::endl;
	//YYYY-MM-DD 形式:2023-08-15
	std::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 second
		int 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 1900
		int 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);        //定义天数:11
	std::cout << ds << std::endl;         //输出天数:11
	boost::gregorian::weeks ws(3);        //定义周数:3
	std::cout << ws << std::endl;         //输出周数,输出形式为以天数形式输出:21
	boost::gregorian::months ms(2);       //定义月数:2
	std::cout << ms.number_of_months() << std::endl;  //输出月数:2
	boost::gregorian::years ys(2);        //定义年数
	std::cout << ys.number_of_years() << std::endl;   //输出年数:2

	boost::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-25
	Obj -= 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-15
	std::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-21
	dp.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.002300
	std::cout << timeObj << std::endl;

	//时间的分开声明:
	boost::posix_time::hours ho(2);      //boost::posix_time::hours声明小时:2
	boost::posix_time::minutes mi(30);   //boost::posix_time::minutes声明分钟:30
	boost::posix_time::seconds se(25);   //boost::posix_time::seconds声明秒数:25
	boost::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::date
	std::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.coloradmin.cn/o/792708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI绘画 | 黄金时代的铠甲女王

我是赤辰。本栏目专程向大家分享由SD制作的令人惊叹的AI绘画作品。这些作品以高品质、纯净背景、完美形象和直爽风格脱颖而出。数字化时代的艺术创新&#xff0c;接下来让我们一同领略这些作品带来的视觉盛宴&#xff0c;让艺术点亮生活&#xff01; 参考提示词&#xff1a; 非…

mysql的日期类型的数据转换为年或者月类型的统计

SELECT CONCAT(YEAR(DATE), if (MONTH(DATE)<10,CONCAT(0,MONTH(DATE)),MONTH(DATE))) AS date , round(SUM(capacity),2) AS ca_dsoc FROM dianchi4 where date > 20211231 GROUP BY YEAR(DATE), MONTH(DATE) 月度的跨年处理就是第一个

教师综合评价系统ssm学生班级课程选课教务评教管理jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于Java的疫情社区人员流动管理系统springboot vue …

大数据时代个人信息安全保护小贴士

个人信息安全保护小贴士 1. 朋友圈“五不晒”2. 手机使用“四要”、“六不要”3. 电脑使用“七注意”4. 日常上网“七注意”5. 日常生活“五注意” 互联网就像公路&#xff0c;用户使用它&#xff0c;就会留下脚印。 每个人都在无时不刻的产生数据&#xff0c;在消费数据的同时…

error: /tmp/ccxy1wo0.o: multiple definition of ‘tgt_flow_thread_init‘

linux 项目使用Makefile 编译代码时&#xff0c;一直报错 从报错意思上看很明确&#xff0c;就是重复定义 tgt_flow_thread_init函数 但是我从全局搜索代码看根本不存在重复定义问题。 从网上看是说可能存在头文件有重复的定义或者头文件被重复的引用&#xff0c;但是我看了…

PM、PMZ、PDM、VPDM比例调压阀控制放大器

PMV、PDV、SPDB、VPDB比例溢流阀控制放大器 PM、PMZ、PDM、VPDM比例调压阀控制放大器 SE、SEH、PSR2、PSR3比例流量调节阀控制放大器 EDL、PSL、 PSV、PSLF、PSVF比例多路换向阀控制放大器 比例多路换向阀属于换向阀类。 它控制一个或同时操作的多个液压耗能器的运动方向和…

【C语言】9-三大结构之选择结构-3

1. 综合举例 1.1 例1 编写一个程序完成输入一个 1-7 中的数字,输出对应的是星期几 这里推荐使用 Visio 或者类似的软件来画一个流程图。在进行程序设计时,尤其是大型项目时,软件流程图可以帮助我们很好的分析程序的结构以及结构需求,跟着流程图来写程序可以让写出来的程序…

数据库触发器简介——插入数据的触发器

1.触发器 准备工作&#xff1a;日志表user_logs create table user_logs(id int(11) not null auto_increment,operation varchar(20) not null comment 操作类型, insert/update/delete,operate_time datetime not null comment 操作时间,operate_id int(11) not null commen…

TortoiseGit 入门指南17:使用子模块

如果你想在自己的代码仓库中嵌入其它仓库&#xff0c;这称为引入子模块&#xff08;Submodule&#xff09;。使用右键菜单TortoiseGit - Submodules Add 选项&#xff0c;弹出添加子模块对话框&#xff0c;可以将一个外部仓库嵌入到源代码树的专用子目录中。 Repository&#x…

Apache pulsar 技术系列-- 消息重推的几种方式

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案&#xff0c;支持多租户、低延时、读写分离、跨地域复制&#xff08;GEO replication&#xff09;、快速扩容、灵活容错等特性。在很多场景下&#xff0c;用户需要通过 MQ 实现消息的重新推送能力&#xff0c…

若依框架@DataScop不生效问题

主要原因没有在方法传参中method直接变成对象&#xff0c;而还是用String来进行接受&#xff0c;导致切面没有获取到参数 若依框架DataScop不生效问题

neo4j教程-Cypher操作

Cypher基础操作 Cypher是图形存储数据库Neo4j的查询语言&#xff0c;Cypher是通过模式匹配Neo4j数据库中的节点和关系&#xff0c;从而对数据库Neo4j中的节点和关系进行一系列的相关操作。 下面&#xff0c;通过一张表来介绍一下常用的Neo4j操作命令及相关说明&#xff0c;具…

产业大数据应用:洞察企业全维数据,提升企业监、管、服水平

​在数字经济时代&#xff0c;数据已经成为重要的生产要素&#xff0c;数字化改革风生水起&#xff0c;在新一代科技革命、产业革命的背景下&#xff0c;产业大数据服务应运而生&#xff0c;为区域产业发展主导部门提供了企业洞察、监测、评估工具。能够助力区域全面了解企业经…

打造交流利器:PHP留言板功能详解与实践

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。多年电商行业从业经验&#xff0c;对系统架构&#xff0c;数据分析处理等大规模应用场景有丰富经验。 &#x1f3c6;本文已收录于PHP专栏&#xff1a;PHP…

聚类算法概述

聚类算法简介 1.1 聚类算法在现实中的应用 用户画像,广告推荐,Data Segmentation,搜索引擎的流量推荐,恶意流量识别 基于位置信息的商业推送,新闻聚类,筛选排序 图像分割,降维,识别;离群点检测;信用卡异常消费;发掘相同功能的基因片段 1.2 聚类算法的概念 聚类…

Spring 源码解读

1、Spring 的结构组成 1.1、核心类介绍 Spring 中有两个最核心的类 1 DefaultListableBeanFactory XmlBeanFactory 继承自 DefaultListableBeanFactory&#xff0c;而DefaultListableBeanFactory 是整个 bean加载的核心部分&#xff0c;是 Spring 注册及加载 bean 的默认实现…

DAY13_会话技术-CookieSession综合案例

目录 1 会话跟踪技术的概述2 Cookie2.1 Cookie的基本使用2.1.1 概念2.1.2 Cookie的工作流程2.1.3 Cookie的基本使用2.1.3.1 发送Cookie2.1.3.2 获取Cookie 2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文 3 Session3.1 Session的基本使用…

/var/lock/subsys目录的作用

总的来说&#xff0c;系统关闭的过程&#xff08;发出关闭信号&#xff0c;调用服务自身的进程&#xff09;中会检查/var/lock/subsys下的文件&#xff0c;逐一关闭每个服务&#xff0c;如果某一运行的服务在/var/lock/subsys下没有相应的选项。在系统关闭的时候&#xff0c;会…

【SpringBoot】简介及传统的 Spring 框架:对比和分析

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 今天给大家带来的是 SpringBoot 的简介&#xff0c;SpringBoot 项目的创建&#xff0c;相较于 Spring 框架的优点&#xff1a; 1. 快速的集成框架 2.内置运行容器, 快速的部署项目 3. 摒弃…

数据接口有哪些?(数据接口有哪几种)

数据接口是指不同应用程序或系统之间交换数据的通信界面。在现代信息化社会中&#xff0c;数据接口扮演着极为重要的角色&#xff0c;它们使得不同平台之间能够相互连接和交流&#xff0c;从而实现数据共享和应用集成。 数据接口的种类繁多&#xff0c;常见的有以下几种&#…