Boost 时间库

参考

参考链接
参考链接

头文件

#include <boost/date_time/posix_time/posix_time.hpp>

时间长度

初始化

创建时间长度,构造函数中直接传入时分秒和微秒值
这里传入的时分秒微秒的值并不一定要在各自的限度内,超出限度的时间会自动进位

	boost::posix_time::time_duration td1(1, 10, 30, 1000 * 1000 * 31);	
	std::cout << td1.total_microseconds() << std::endl;

但需要注意的是,这里传入的值不能存在负值

	boost::posix_time::time_duration td1(1, 10, 30, -100);	
	std::cout << td1.total_microseconds() << std::endl;

可以通过传入字符串获取时间长度,字符串中时分秒微秒必须是冒号分割的

boost::posix_time::time_duration	td = boost::posix_time::duration_from_string("1:10:30:001");		// 01:10:30

需要注意的是,这里可以传入负数

td = boost::posix_time::hours(1) + boost::posix_time::minutes(10) + boost::posix_time::seconds(59);	

时间长度 加法

时间长度加法,需要注意的是,这里可以传入负数

td = boost::posix_time::hours(1) + boost::posix_time::minutes(10) + boost::posix_time::seconds(59);	

时间长度 除法

td = td/2;	

时间长度 乘法

td = td*2;

时间长度 减法

td = td - boost::posix_time::seconds(59);

获取参数

获取小时

td2.hours()

获取分钟

td2.minutes()

获取秒数

td2.seconds()

获取总秒数

td2.total_seconds()

获取总毫秒数

td.total_milliseconds()

获取总微秒数

td.total_microseconds()

时间精度

#include <iostream>
#define BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG		// 必须在头文件之前定义宏,否则无效!!!
#include <boost/date_time/posix_time/posix_time.hpp>
int main(int argc, char *argv[])
{
	// 第四个参数,如果精确度是微秒,单位就是微秒,如果精确度是纳秒,单位就是纳秒
	boost::posix_time::time_duration td(1, 10, 30, 1000);				// 01:10:30
	// 查看当前的精确度
	if (td.resolution() == boost::date_time::nano) printf("精确度:纳秒\n");
	else printf("精确度:微秒\n");
	//td += boost::posix_time::nanoseconds(100);
	// 返回秒的小数部分的位数(微秒6位,纳秒9位)
	std::cout << td.num_fractional_digits() << std::endl;
	//返回当前的总纳秒数
	std::cout << td.total_nanoseconds() << std::endl;
}

不加入宏定义结果输出
不加入宏定义
加入宏定义时间输出
加入宏定义的输出

时间类

本地时间

秒级 :获取计算机本地时间

	boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time();
	std::cout << pt << std::endl;	

秒级:本地UTC时间

	boost::posix_time::ptime pt = boost::posix_time::second_clock::universal_time();
	std::cout << pt << std::endl;	

微秒级:本地时间

	boost::posix_time::ptime pt = boost::posix_time::microsec_clock::local_time();		
	std::cout << pt << std::endl;	

微秒级:本地UTC时间

	boost::posix_time::ptime pt = boost::posix_time::microsec_clock::universal_time();	
	std::cout << pt << std::endl;	

字符串转换时间

日期与时间中间以空格区分

	boost::posix_time::ptime  pt = boost::posix_time::time_from_string("2021-11-24 14:11:34");

日期与时间中间以T区分

	boost::posix_time::ptime pt = boost::posix_time::from_iso_string("20211124T141134");

初始化

ptime的初始化以日期+时间完成初始化
日期类为:

boost::gregorian::date

头文件

#include <boost/date_time/gregorian/gregorian.hpp>

初始化时间为2022-06-29-14-09-14

	boost::gregorian::date dt(2022, 06, 29);
	boost::posix_time::time_duration td(14, 9, 14);
	boost::posix_time::ptime pt(dt, td);

只传入日期,初始化时间为00:00:00

	boost::posix_time::ptime pt1(dt);    

ptime的输出

默认输出与to_simple_string一样输出格式为2022-Jun-29 21:59:02
格式为年-月(英语缩写)-日 时:分:秒

	boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time();		
	std::cout << pt << std::endl;		

格式为年-月(英语缩写)-日 时:分:秒

	std::cout << boost::posix_time::to_simple_string(pt) << std::endl;		

输出格式为:年月(数字)日T时分秒

	std::cout << boost::posix_time::to_iso_string(pt) << std::endl;		

输出格式为年-月(数字)-日T时:分:秒

	std::cout << boost::posix_time::to_iso_extended_string(pt) << std::endl;		

在这里插入图片描述

与C语言接口转换

本地时间转换

	time_t timer = time(NULL);
	tm *t_tm = localtime(&timer);
	pt = boost::posix_time::ptime_from_tm(*t_tm);
	tm t = boost::posix_time::to_tm(pt);
	printf("%4d-%02d-%02d %02d:%02d:%02d\n", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);

UTC时间

	boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time();
	time_t timer = time(NULL);
	timer = boost::posix_time::to_time_t(pt);
	pt = boost::posix_time::from_time_t(timer);

算法

获取从当天0时开始的时间长度

boost::posix_time::time_duration td1 = pt.time_of_day();

向后推算一个小时

pt = pt + boost::posix_time::hours(10);

与某个时间节点相差的时间长度

	boost::posix_time::ptime  pt1 = boost::posix_time::time_from_string("2021-11-24 14:11:34");
	boost::posix_time::time_duration td2 = pt1 - pt;
	std::cout << td1 << std::endl;

sleep

线程里的接口,但个人感觉放到这里比较合适

#include <boost/thread.hpp>
	boost::this_thread::sleep(boost::posix_time::millisec(100));

日期

日期参考

初始化

构造函数初始化

	boost::gregorian::date date1;//一个无效日期
	boost::gregorian::date date2(2021, 9, 16);//使用数字构造日期
	boost::gregorian::date date3(2021, boost::gregorian::Sep, 16);//使用英文构造日期
	boost::gregorian::date date4(date2);//拷贝构造

字符串初始化

	boost::gregorian::date date5 = boost::gregorian::from_string("2021/09/16");
	boost::gregorian::date date5 = boost::gregorian::from_string("2021-09-16");
	boost::gregorian::date date6 = boost::gregorian::from_undelimited_string("20210916");

获取当天日期对象

	boost::gregorian::date date7 = boost::gregorian::day_clock::local_day();
	boost::gregorian::date date8(boost::date_time::min_date_time);//使用特殊时间枚举创建日期
	pos_infin:正无限
	neg_infin:负无限
	no_a_date_time:无效时间
	min_date_time:可表示的最小日期或时间
	max_date_time:可表示的最大日期或时间

日期接口

获取年月日方式1

	std::cout << date6.year() << std::endl;
	std::cout << date6.month() << std::endl;//英文方式
	std::cout << date6.day() << std::endl;

获取年月日方式2

	boost::gregorian::date::ymd_type ymd = date6.year_month_day();
	std::cout <<ymd.year << std::endl;
	std::cout <<ymd.month << std::endl;//英文方式
	std::cout <<ymd.day << std::endl;
	//返回日期的星期几英语模式。
	std::cout << date6.day_of_week() << std::endl;
	//该日期是这一年的第几天
	std::cout << date6.day_of_year() << std::endl;
	//返回当月的最后一天的 date 对象。
	std::cout << date6.end_of_month() << std::endl;
	//所在的星期是这一年的第几周
	std::cout << date6.week_number() << std::endl;

格式化输出

转换为YYYY-mmm(英语缩写)-DD格式的字符串

    std::cout<<to_simple_string(d8)<<std::endl;

转换为YYYYMM(英语缩写)DD格式的数字字符串

 std::cout<<to_iso_string(d8)<<std::endl;

转换为YYYY-MM(数字)-DD格式的数字字符串

    std::cout<<to_iso_extended_string(d8)<<std::endl;

相关算法

	boost::gregorian::date date1(2021, 9, 18);//一个无效日期
	boost::gregorian::date date2(2021, 9, 16);//使用数字构造日期

	std::cout << "两日期之差" << date2 - date1 << "天" << std::endl;
	date2 += boost::gregorian::days(10);//天数
	std::cout<< boost::gregorian::to_iso_extended_string(date2) <<std::endl;
	date2 += boost::gregorian::months(2);//月份
	std::cout << boost::gregorian::to_iso_extended_string(date2) << std::endl;
	date2 -= boost::gregorian::weeks(1);//星期
	std::cout << boost::gregorian::to_iso_extended_string(date2) << std::endl;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值