C++怎么实现比较日期大小
一、目的
用来比较两个日期。日期格式:2023-03-31 09:16:56。
二、代码
//std::wstring strA = L"2023-03-31 09:16:56";
//std::wstring strB = L"2023-03-31 09:21:34";
bool LessThanEx(std::wstring strA, std::wstring strB)
{
std::wstring strLeftA, strRightA;
std::wstring strLeftB, strRightB;
{
std::wstring strLeft, strRight;
std::size_t nIndex = strA.find(L" ");
if (nIndex!=std::string::npos)
{
strLeft = strA.substr(0,nIndex);
strRight = strA.substr(nIndex+1);
std::wstring wsDivide = L"-";
strLeft.replace(strLeft.find(wsDivide),wsDivide.length(),L"");
strLeft.replace(strLeft.find(wsDivide),wsDivide.length(),L"");
wsDivide = L":";
strRight.replace(strRight.find(wsDivide),wsDivide.length(),L"");
strRight.replace(strRight.find(wsDivide),wsDivide.length(),L"");
}
strLeftA = strLeft;
strRightA = strRight;
}
{
std::wstring strLeft, strRight;
std::size_t nIndex = strB.find(L" ");
if (nIndex!=std::string::npos)
{
strLeft = strB.substr(0,nIndex);
strRight = strB.substr(nIndex+1);
std::wstring wsDivide = L"-";
strLeft.replace(strLeft.find(wsDivide),wsDivide.length(),L"");
strLeft.replace(strLeft.find(wsDivide),wsDivide.length(),L"");
wsDivide = L":";
strRight.replace(strRight.find(wsDivide),wsDivide.length(),L"");
strRight.replace(strRight.find(wsDivide),wsDivide.length(),L"");
}
strLeftB = strLeft;
strRightB = strRight;
}
__int64 nLeftA = std::stoi(strLeftA);
__int64 nLeftB = std::stoi(strLeftB);
__int64 nRightA = std::stoi(strRightA);
__int64 nRightB = std::stoi(strRightB);
if(nLeftA < nLeftB)
{
return true;
}
else if(nLeftA > nLeftB)
{
return false;
}
else
{
if(nRightA >= nRightB)
{
return false;
}
return true;
}
return true;
}
//CString strA = _T("2023-03-31 09:16:56");
//CString strB = _T("2023-03-31 09:21:34");
bool LessThan(CString strA, CString strB)
{
CString strLeftA, strRightA;
CString strLeftB, strRightB;
{
CString strLeft, strRight;
int nIndex = strA.Find(_T(" "));
if (nIndex > -1)
{
strLeft = strA.Left(nIndex);
strRight = strA.Mid(nIndex+1,strA.GetLength() - nIndex-1);
strLeft.Replace(_T("-"),_T(""));
strRight.Replace(_T(":"),_T(""));
}
strLeftA = strLeft;
strRightA = strRight;
}
{
CString strLeft, strRight;
int nIndex = strB.Find(_T(" "));
if (nIndex > -1)
{
strLeft = strB.Left(nIndex);
strRight = strB.Mid(nIndex+1,strB.GetLength() - nIndex-1);
strLeft.Replace(_T("-"),_T(""));
strRight.Replace(_T(":"),_T(""));
}
strLeftB = strLeft;
strRightB = strRight;
}
__int64 nLeftA = _tstoi64(strLeftA);
__int64 nLeftB = _tstoi64(strLeftB);
__int64 nRightA = _tstoi64(strRightA);
__int64 nRightB = _tstoi64(strRightB);
if(nLeftA < nLeftB)
{
return true;
}
else if(nLeftA > nLeftB)
{
return false;
}
else
{
if(nRightA >= nRightB)
{
return false;
}
return true;
}
return true;
}三、补充
除了比较大小,C++还可以实现计算日期相差多少天,下面是实现代码,希望对大家有所帮助
#include#include #include using namespace std; bool isLeap(int year) { return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0); } int main() { //定义好平年和闰年每月的天数 int monthDays[13][2] = { {0,0},{31,31},{28,29},{30,30},{31,31},{30,30}, {31,31},{30,30},{31,31},{30,30},{31,31},{30,30}, {31,31} }; int time1, year1, month2, days1; int time2, year2, month3, days2; int numbers =1; // 输入两个日期 cout << "输入两个日期,空格分隔"; cin >> time1 >> time2; if (time1>time2){ int temp = time1; time1 = time2; time2 = temp; } //拆解日期,分为年,月,号 year1 = time1 / 10000; month2 = time1 / 100 % 100; days1 = time1 % 100; year2 = time2 / 10000; month3 = time2 / 100 % 100; days2 = time2 % 100; //第一个日期 累加到 第二个日期 while (year1 < year2 || month2 < month3 || days1 < days2) { days1++;// 在第一个日期基础上 加一天 //加一天后,相应的月,年可能也要做一定的变化 if (days1 == monthDays[month2][isLeap(year1)]+1) {//当前号超过当前月最高天数:月份加1,号变成下月的1号 month2++; days1 = 1; } if (month2 == 13) {//月份超过12个月 :年份加1,月份变成下年的1月 year1++; month2 = 1; } numbers++; } cout << numbers << endl; return 0; }