boost的日期时间处理

在c++中获取日期时间比较简单,但如果需要对日期间进行更复杂的使用就有点力不从心了,比如:

1.要计算从2013-07-10 14:33:00到2013-09-28 11:11:30之间的天数、小时数、分钟数、秒数。

2.或者要计算从2013-07-10 14:33:00开始,过了218天30小时14分钟30秒后的时间。

下面来介绍Boost.Date_Time的简单使用。

boost的日期操作需要引入头文件

#include "boost/date_time/gregorian/gregorian.hpp"

时间操作需要引入头文件

#include "boost/date_time/posix_time/posix_time.hpp"


要将日期时间字符串转成boost的ptime类型,可以使用time_from_string函数

boost::posix_time::ptime t1(boost::posix_time::time_from_string("2013-07-10 14:33:00"));
boost::posix_time::ptime t2(boost::posix_time::time_from_string("2013-09-28 11:11:30"));

这个类型是可以进行减操作的,可以得到它们的时间间隔time_duration

boost::posix_time::time_duration td = t2 - t1;
int nHours = td.hours(); //时间间隔小时数,除以24为天数
int nMinutes = td.minutes(); //时间间隔分钟数
int nSeconds = td.seconds(); //时间间隔秒数

在boost中天数类型的定义为days,比如定义218天

boost::gregorian::days dd(218); //218天
boost::posix_time::time_duration td(30,14,30,0); //30小时14分钟30秒

了解boost日期时间库的一些定义,再实现文章开头的两个功能就很简单了,下面写出实现代码

#include

#include "boost/date_time/gregorian/gregorian.hpp"
#include "boost/date_time/posix_time/posix_time.hpp"

int main()
{
	//计算从2013-07-10 14:33:00到2013-09-28 11:11:30之间时间间隔
	boost::posix_time::ptime t1(boost::posix_time::time_from_string("2013-07-10 14:33:00"));
	boost::posix_time::ptime t2(boost::posix_time::time_from_string("2013-09-28 11:11:30"));
	boost::posix_time::time_duration td = t2 - t1;
	std::cout << "days:" << td.hours()/24 << ", hours:" << td.hours() << ", minutes:" << td.minutes() <<
		", seconds:" << td.seconds() << std::endl;

	//计算计算从2013-07-10 14:33:00开始,过了218天30小时14分钟30秒后的日期时间
	boost::gregorian::days dd(218); //218天
	boost::posix_time::time_duration timeDuration(30,14,30,0); //30小时14分钟30秒
	t1 += dd;
	t1 += timeDuration;
	std::cout << t1 << std::endl;
	return 0;
}

运行结果如下图
1

Comments are closed.