C++方式解析时间字符串和计算时间

mac2022-06-30  22

#include "StdAfx.h"#include "MySetTimeByVT.h"#include <ATLComTime.h>#include <OleAuto.h>                //VariantTimeToSystemTime()#include <comutil.h>                //_variant_t#include <iostream>using namespace std;MySetTimeByVT::MySetTimeByVT(void){    GetLocalTime(&m_systime);  }MySetTimeByVT::~MySetTimeByVT(void){}MySetTimeByVT::MySetTimeByVT(SYSTEMTIME sysTime){    m_systime = sysTime;}MySetTimeByVT::MySetTimeByVT(const MySetTimeByVT &time){    this->m_systime = time.m_systime;}MySetTimeByVT::MySetTimeByVT(const char *string){    Parse(string);}SYSTEMTIME MySetTimeByVT::GetTime(){    return m_systime;}void MySetTimeByVT::Parse(const char* timeString){    std::string str_Time = timeString;    Parse(str_Time);}std::string MySetTimeByVT::ToString(const char* format){    string str_Format(format);    return ToString(str_Format);}void MySetTimeByVT::AddYears(int year){    m_milliseconds = m_systime.wMilliseconds;    m_systime.wYear += year;    _variant_t v_time;    SystemTimeToVariantTime(&m_systime,&v_time.date);    VariantTimeToSystemTime(v_time.date,&m_systime);    m_systime.wMilliseconds = m_milliseconds;}void MySetTimeByVT::AddMonths(int month){    m_milliseconds = m_systime.wMilliseconds;    m_systime.wMonth += month;    _variant_t v_time;    SystemTimeToVariantTime(&m_systime,&v_time.date);    VariantTimeToSystemTime(v_time.date,&m_systime);    m_systime.wMilliseconds = m_milliseconds;}void MySetTimeByVT::AddDays(int day){    m_milliseconds = m_systime.wMilliseconds;    m_systime.wDay += day;    _variant_t v_time;    SystemTimeToVariantTime(&m_systime,&v_time.date);    VariantTimeToSystemTime(v_time.date,&m_systime);    m_systime.wMilliseconds = m_milliseconds;}void MySetTimeByVT::AddHours(int hour){    m_milliseconds = m_systime.wMilliseconds;    m_systime.wHour += hour;    _variant_t v_time;    SystemTimeToVariantTime(&m_systime,&v_time.date);    VariantTimeToSystemTime(v_time.date,&m_systime);    m_systime.wMilliseconds = m_milliseconds;}void MySetTimeByVT::AddMinutes(int minute){    m_milliseconds = m_systime.wMilliseconds;    m_systime.wMinute += minute;    _variant_t v_time;    SystemTimeToVariantTime(&m_systime,&v_time.date);    VariantTimeToSystemTime(v_time.date,&m_systime);    m_systime.wMilliseconds = m_milliseconds;}void MySetTimeByVT::AddSeconds(int seconds){    m_milliseconds = m_systime.wMilliseconds;    m_systime.wSecond += seconds;    _variant_t v_time;    SystemTimeToVariantTime(&m_systime,&v_time.date);    VariantTimeToSystemTime(v_time.date,&m_systime);    m_systime.wMilliseconds = m_milliseconds;}void MySetTimeByVT::AddMilliseconds(int milliseconds){    int nowmilliseconds = m_systime.wMilliseconds + milliseconds;    m_systime.wMilliseconds = nowmilliseconds % 1000;    int addSeconds = nowmilliseconds / 1000;    AddSeconds(addSeconds);}void MySetTimeByVT::Parse(std::string& timeString){        if (timeString.empty())    {        cout<<"输入的字符串不能为空!"<<endl;        return;    }        static const basic_string <char>::size_type npos = -1;    try    {    int search_e = timeString.length();    int search_s = search_e;    int search_n = search_s;    //    //年-月-日 时:分:秒.毫秒    //    //时     时:分        时:分:秒        .毫秒     秒.毫秒        分:秒.毫秒        时:分:秒.毫秒            //取毫秒    search_s = timeString.rfind('.');    if (search_s != npos)    {        m_systime.wMilliseconds = stoi(timeString.substr(search_s + 1,search_e));            search_e = search_s;        search_n = timeString.rfind(' ',search_e - 1);        if (search_n != npos)        {            search_s = timeString.rfind(':',search_e - 1);            if (search_s != npos)            {                //取秒                m_systime.wSecond = stoi(timeString.substr(search_s + 1,search_e));                search_e = search_s;                //取分、时                search_s = timeString.rfind(':',search_e - 1);                if (search_s != npos)                {                    //取分                    m_systime.wMinute = stoi(timeString.substr(search_s + 1,search_e));                    search_e = search_s;                    //取时                    if (search_n + 1 < search_e)                    {                        m_systime.wHour = stoi(timeString.substr(search_n + 1,search_e));                    }                    else                    {                        m_systime.wHour = 0;                    }                    search_e = search_n;                }                 else                {                    //取分                    m_systime.wMinute = stoi(timeString.substr(search_n + 1,search_e));                    search_e = search_n;                    m_systime.wHour = 0;                }            }            else                        //取秒(秒.毫秒)            {                m_systime.wHour = 0;                m_systime.wMinute = 0;                if (search_n + 1 < search_e)                {                    m_systime.wSecond = stoi(timeString.substr(search_n + 1,search_e));                }                else                {                    m_systime.wSecond = 0;                }                search_e = search_n;            }        }         else        {            m_systime.wHour = 0;            m_systime.wMinute = 0;            m_systime.wSecond = stoi(timeString.substr(0,search_e));            search_e = 0;        }            }    else    {        m_systime.wMilliseconds = 0;        //取时、分、秒        search_s = timeString.rfind(' ',search_e - 1);        if (search_s != npos)        {            //取时、分、秒            search_n = timeString.find(':',search_s + 1);            if (search_n != npos)            {                m_systime.wHour = stoi(timeString.substr(search_s + 1,search_n));                search_s = search_n;                //取分、秒                search_n = timeString.find(':',search_s + 1);                if (search_n != npos)                {                    m_systime.wMinute = stoi(timeString.substr(search_s + 1,search_n));                    //取秒                    m_systime.wSecond = stoi(timeString.substr(search_n + 1,search_e));                }                 else                {                    if (search_s + 1 < search_e)                    {                        m_systime.wMinute = stoi(timeString.substr(search_s + 1,search_e));                    }                     else                    {                        m_systime.wMinute = 0;                    }                    m_systime.wSecond = 0;                }                                search_n = timeString.rfind(' ',search_e - 1);                search_e = search_n;            }            else            {                m_systime.wHour = stoi(timeString.substr(search_s + 1,search_e));                m_systime.wMinute = 0;                m_systime.wSecond = 0;                search_e = search_s;            }        }        else        {            m_systime.wHour = 0;            m_systime.wMinute = 0;            m_systime.wSecond = 0;        }    }    //    //天        月-天        年-月-天    //取天    search_s = timeString.rfind('-',search_e - 1);    if (search_s != npos)    {        m_systime.wDay = stoi(timeString.substr(search_s + 1,search_e));        search_e = search_s;        //取月        search_s = timeString.rfind('-',search_e - 1);        if (search_s != npos)        {            m_systime.wMonth = stoi(timeString.substr(search_s + 1,search_e));            search_e = search_s;            //取年            search_s = 0;            m_systime.wYear = stoi(timeString.substr(search_s,search_e));            search_e = search_s;        }        else        {            search_s = 0;            if (search_s < search_e)            {                m_systime.wMonth = stoi(timeString.substr(search_s,search_e));            }            else            {                m_systime.wMonth = 0;            }            search_e = search_s;            m_systime.wYear = 0;        }    }    else    {        search_s = 0;        if (search_s < search_e)        {            m_systime.wDay = stoi(timeString.substr(search_s,search_e));        }        else        {            m_systime.wDay = 0;        }        search_e = search_s;        m_systime.wMonth = 0;        m_systime.wYear = 0;    }        //    }    catch(...)    {        cout<<"输入字符串有问题!"<<endl;    }    m_milliseconds = m_systime.wMilliseconds;    //    //存在的问题 超过标准数值的值 并未被自动转换为标准值    _variant_t v_time;    SystemTimeToVariantTime(&m_systime,&v_time.date);    VariantTimeToSystemTime(v_time.date,&m_systime);        //转换为标准值    time_t m_time_t = SystemTimeToTime_t(m_systime);    m_systime = Time_tToSystemTime(m_time_t);    m_systime.wMilliseconds = m_milliseconds;}std::string MySetTimeByVT::ToString(std::string format){    const int str_size = 128;    char c_date[str_size] = {0};    if (format.empty())    {        sprintf_s(c_date,str_size,"d-d-d d:d:d.%d",m_systime.wYear,m_systime.wMonth,\                        m_systime.wDay,m_systime.wHour,m_systime.wMinute,m_systime.wSecond,m_systime.wMilliseconds);        return c_date;    }    static const basic_string <char>::size_type npos = -1;    //日期    if (format.find("-m") != npos || format.find("-M") != npos)    {        sprintf_s(c_date,str_size,"d-d",m_systime.wYear,m_systime.wMonth);        if (format.find("-d") != npos || format.find("-D") != npos)        {            sprintf_s(c_date,str_size,"%s-d",c_date,m_systime.wDay);        }    }    else if (format.find("m-") != npos || format.find("M-") != npos)    {        sprintf_s(c_date,str_size,"d-d",m_systime.wMonth,m_systime.wDay);    }    else if (format.find('y') != npos || format.find('Y') != npos)    {        sprintf_s(c_date,str_size,"d",m_systime.wYear);    }    else if ( format.find('M') != npos && format.find(":") == npos && format.find("-") == npos )    {        sprintf_s(c_date,str_size,"d",m_systime.wMonth);    }    else if (format.find('d') != npos || format.find('D') != npos)    {        sprintf_s(c_date,str_size,"d",m_systime.wDay);    }    //时间    if (format.find(":m") != npos || format.find(":M") != npos)    {        sprintf_s(c_date,str_size,"%s d:d",c_date,m_systime.wHour,m_systime.wMinute);        if (format.find("s.") != npos || format.find("S.") != npos)        {            sprintf_s(c_date,str_size,"%s:d.%d",c_date,m_systime.wSecond,m_systime.wMilliseconds);        }        else if (format.find(":s") != npos || format.find(":S") != npos)        {            sprintf_s(c_date,str_size,"%s:d",c_date,m_systime.wSecond);        }    }    else if (format.find("m:") != npos || format.find("M:") != npos)    {        sprintf_s(c_date,str_size,"%s d:d",c_date,m_systime.wMinute,m_systime.wSecond);        if (format.find("s.") != npos || format.find("S.") != npos)        {            sprintf_s(c_date,str_size,"%s.%d",c_date,m_systime.wMilliseconds);        }    }    else if (format.find("s.") != npos || format.find("S.") != npos)    {        sprintf_s(c_date,str_size,"%s d.%d",c_date,m_systime.wSecond,m_systime.wMilliseconds);    }    else if (format.find('h') != npos || format.find('H') != npos)    {        sprintf_s(c_date,str_size,"%s d",c_date,m_systime.wHour);    }    else if (format.find('m') != npos && format.find("-") == npos &&  format.find(":") == npos )    {        sprintf_s(c_date,str_size,"%s d",c_date,m_systime.wMinute);    }    else if (format.find('s') != npos || format.find('S') != npos)    {        sprintf_s(c_date,str_size,"%s d",c_date,m_systime.wSecond);    }    else if (format.find('f') != npos || format.find('F') != npos)    {        sprintf_s(c_date,str_size,"%s d",c_date,m_systime.wMilliseconds);    }    return c_date;}SYSTEMTIME MySetTimeByVT::Time_tToSystemTime(time_t t){    //tm temptm = *localtime(&t);    tm temptm;    localtime_s(&temptm,&t);    SYSTEMTIME st = {1900 + temptm.tm_year,         1 + temptm.tm_mon,         temptm.tm_wday,         temptm.tm_mday,         temptm.tm_hour,         temptm.tm_min,         temptm.tm_sec,         0};    return st;}time_t MySetTimeByVT::SystemTimeToTime_t( const SYSTEMTIME& st ){    tm temptm = {st.wSecond,         st.wMinute,         st.wHour,         st.wDay,         st.wMonth - 1,         st.wYear - 1900,         st.wDayOfWeek,         0,         0};    return mktime(&temptm);}

转载于:https://www.cnblogs.com/shenchao/p/3211825.html

相关资源:垃圾分类数据集及代码
最新回复(0)