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; }