boost库时间操作-给一个起始时间和经过的时间得到一个终止时间

一、说明:使用boost库时间相关的类实现计算时间的三个小函数:
1、给一个起始日期和经过的天数得到一个日期,起始日期形如:2018-06-27或者2018/06/27;返回日期形如:2018-06-27
2、 给一个起始时间和经过的秒数得到一个时间,起始时间形如:14:20:30;返回时间形如:14:20:30
3、给一个起始日期和时间和经过的秒数得到一个日期和时间,起始日期形如:2018-06-27 14:20:30或者2018/06/27 14:20:30;返回日期形如:2018-06-27T14:20:30

二、实现的类如下:

/************************************myDateTime.h***************************************/
#ifndef MYDATETIME_H
#define MYDATETIME_H
#include <iostream>
#include <string>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

using namespace std;
using namespace boost::gregorian;
using namespace boost::posix_time;

class myDateTime
{
public:
    myDateTime();
    ~myDateTime();

    // 给一个起始日期和经过的天数得到一个日期,起始日期形如:2018-06-27或者2018/06/27;返回日期形如:2018-06-27
    string getEndDateByBeginDate(const string beginDateStr,const int dayInts,string &endDateStr);

    // 给一个起始时间和经过的秒数得到一个时间,起始时间形如:14:20:30;返回时间形如:14:20:30
    string getEndTimeByBeginTime(const string beginTimeStr,const int secondInts,string &endTimeStr);

    //给一个起始日期和时间和经过的秒数得到一个日期和时间,起始日期形如:2018-06-27 14:20:30或者2018/06/27 14:20:30;返回日期形如:2018-06-27T14:20:30
    string getEndDateTimeByBeginDateTime(const string beginDateTimeStr,const int secondInts,string &endDateTimeStr);
};

#endif // MYDATETIME_H

/************************************myDateTime.cpp***************************************/
#include "myDateTime.h"

myDateTime::myDateTime()
{

}

myDateTime::~myDateTime()
{

}

//************************************
// 函数名称: getEndDateByBeginDate
// 函数说明:给一个起始日期加上一个天数得到一个日期,起始日期形如:2018-06-27
// 或者2018/06/27;返回日期形如:2018-06-27
// 返 回 值: string
// 参    数: const string beginDateStr
// 参    数: const int dayInts
// 参    数: string &endDateStr
// 作    者:ISMILELI
// 作成日期:2018/06/27
// 修改记录:
//************************************
string myDateTime::getEndDateByBeginDate(const string beginDateStr, const int dayInts,string &endDateStr)
{
    date beginDate(from_string(beginDateStr));
    days stepDays(dayInts);
    date tempDate = beginDate+stepDays;
    string tempDateStr = to_iso_extended_string(tempDate);
    endDateStr = tempDateStr;
    return tempDateStr;
}

//************************************
// 函数名称: getEndDateByBeginDate
// 函数说明:给一个起始时间加上秒数得到一个时间,起始时间形如:14:20:30;返回时间形如:14:20:30
// 返 回 值: string
// 参    数: const string beginTimeStr
// 参    数: const int secondInts
// 参    数: string &endTimeStr
// 作    者:ISMILELI
// 作成日期:2018/06/27
// 修改记录:
//************************************
string myDateTime::getEndTimeByBeginTime(const string beginTimeStr, const int secondInts, string &endTimeStr)
{
    time_duration beginTime = duration_from_string(beginTimeStr);
    int hourInt = secondInts/3600;
    int minuteInt = secondInts%3600/60;
    int secondInt = secondInts%3600%60;
    time_duration endTimeDur = beginTime + hours(hourInt) + minutes(minuteInt) + seconds(secondInt);
    string tempEndTime = to_simple_string(endTimeDur);
    endTimeStr = tempEndTime;
    return tempEndTime;
}

//************************************
// 函数名称: getEndDateByBeginDate
// 函数说明:给一个起始日期和时间和经过的秒数得到一个日期和时间,起始日期形如:2018-06-27 14:20:30
// 或者2018/06/27 14:20:30;返回日期形如:2018-06-27 14:20:30
// 返 回 值: string
// 参    数: const string beginDateTimeStr
// 参    数: const int secondInts
// 参    数: string &endDateTimeStr
// 作    者:ISMILELI
// 作成日期:2018/06/27
// 修改记录:
//************************************
string myDateTime::getEndDateTimeByBeginDateTime(const string beginDateTimeStr, const int secondInts, string &endDateTimeStr)
{
    ptime beginDateTime = time_from_string(beginDateTimeStr);
    string tempEndDateTime = to_iso_extended_string(beginDateTime + seconds(secondInts));
    endDateTimeStr = tempEndDateTime;
    return tempEndDateTime;
}

三、测试接口:

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

#include "myDateTime.h"

using namespace std;
using namespace boost::gregorian;
using namespace boost::posix_time;


int main(int argc, char *argv[])
{
    cout << "test myDateTime ...." << endl;
    myDateTime *pDateTime = new myDateTime;
    string endDateStr = "";
    pDateTime->getEndDateByBeginDate("2000-01-01 00:00:00",1000,endDateStr);
    cout << "endDateStr:" << endDateStr << endl;

    string endTimeStr = "";
    pDateTime->getEndTimeByBeginTime("14:20:30",1000,endTimeStr);
    cout << "endTimeStr:" << endTimeStr << endl;

    string endDateTimeStr = "";
    pDateTime->getEndDateTimeByBeginDateTime("2010-06-27 14:20:30",10000,endDateTimeStr);
    cout << "endDateTimeStr:" << endDateTimeStr << endl;
    return 0;
}

结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/toby54king/article/details/80836248