#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
相关资源:垃圾分类数据集及代码