概述
如何用c++计算任意两个日期的天数差?下面我写了一个程序,希望能够给你带来答案。本人刚学C++不久,写的C++程序还带有C的味道,希望给位读者不要在意。
1.思路
这个问题有三种情况:同年同月、同年不同月、不同年。
同年同月非常容易,较难解决的是后两个。
思路为下:
1.计算日期在前的一年到年底的天数
2.计算日期在后的一年到年初的天数
3.计算中间年份的天数
————————————————
以上为解决不同年的思路。
同年不同月的思路整体差不多,也是计算前一个月到月底的天数、后一个月到月初的天数、中间月份的天数。
2.代码实现
我建立了三个函数:months1–计算到年底的天数差,months2–计算到年初的天数差,years1–计算两年之间的天数差。还有一个就是闰年判断函数lapeyear,用来判断一年中的二月有没有29天。
int months1(int year, int month, int date)//计算到年底日差的函数
{
int i, d = 0;
int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (lapeyear(year))years[1] = 29;
for (i = 11; i > month - 1; i--)
{
d += years[i];
}
d = d + years[month - 1] - date;
return d;
}
int months2(int year, int month, int date)//计算到年初日差的函数
{
int i, d = 0;
int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (lapeyear(year))years[1] = 29;
for (i = 0; i < month - 1; i++)
{
d += years[i];
}
d += date;
return d;
}
int years1(int year1, int year2)//计算两年间的天数
{
int d = 0, i, r = 0, z = 0;
if (year1 < year2)
{
for (i = year1 + 1; i < year2; i++)
{
if (lapeyear(i))r++;//两年之间有多少个闰月
}
d = (year2 - year1 - 1) * 365 + r;
}
else
{
for (i = year2 + 1; i < year1; i++)
{
if (lapeyear(i))r++;//两年之间有多少个闰月
}
d = (year1 - year2 - 1) * 365 + r;
}
return d;
}
以下为全部的代码
#include<iostream>
using namespace std;
int lapeyear(int year2)//闰年判断函数
{
if ((year2 % 400 == 0) || (year2 % 4 == 0 && year2 % 100 != 0))
return 1;
else return 0;
}
int years1(int year1, int year2)//计算两年间的天数
{
int d = 0, i, r = 0, z = 0;
if (year1 < year2)
{
for (i = year1 + 1; i < year2; i++)
{
if (lapeyear(i))r++;//两年之间有多少个闰月
}
d = (year2 - year1 - 1) * 365 + r;
}
else
{
for (i = year2 + 1; i < year1; i++)
{
if (lapeyear(i))r++;//两年之间有多少个闰月
}
d = (year1 - year2 - 1) * 365 + r;
}
return d;
}
int months2(int year, int month, int date)//计算到年初日差的函数
{
int i, d = 0;
int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (lapeyear(year))years[1] = 29;
for (i = 0; i < month - 1; i++)
{
d += years[i];
}
d += date;
return d;
}
int months1(int year, int month, int date)//计算到年底日差的函数
{
int i, d = 0;
int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (lapeyear(year))years[1] = 29;
for (i = 11; i > month - 1; i--)
{
d += years[i];
}
d = d + years[month - 1] - date;
return d;
}
int main()
{
int year1, year2, month1, month2, date1, date2;
int d = 0, i, m = 0;
int x1, x2;//记录两个日期分别到年初和年底的天数
int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
cout << "请输入两个日期" << endl;
cin >> year1 >> month1 >> date1 >> year2 >> month2 >> date2;
if (year1 == year2)//大前提,同年时
{
if (lapeyear(year1))years[1] = 29;
if (month1 == month2)d = date1 > date2 ? date1 - date2 : d = date2 - date1;//同年同月
if (month1 != month2)//同年不同月
{
//计算方法为求出两月之前的天数,然后求前一个月剩余的天数和后一个月已经开始的天数
if (month1 < month2)
{
{
for (i = month1; i < month2 - 1; i++)
{
m += years[i];
}
}
d = years[month1 - 1] - date1;
d += m + date2;
}
else
{
for (i = month2; i > month1 - 1; i++)
{
m += years[i];
}
d = years[month2 - 1] - date2;
d += m + date1;
}
}
}
else//求不同年的任意日期的天数差
{
if (year1 > year2)
{
x1 = months1(year2, month2, date2);//x1为到年底的日差,x2为到年初的日差
x2 = months2(year1, month1, date1);
d = years1(year2, year1);
d += x1 + x2;
}
else
{
x2 = months2(year2, month2, date2);
x1 = months1(year1, month1, date1);
d = years1(year1, year2);
d += x1 + x2;
}
}
cout << "两年之间的天数差为" << " " << d;
return 0;
}
最后,个人觉得我所写的代码最大的不足就是过多的使用了if语句,给阅读带来了困难,下一步本人会优化。
感谢你的阅读!
最后
以上就是虚拟斑马为你收集整理的C++计算任意两个日期地天数差的全部内容,希望文章能够帮你解决C++计算任意两个日期地天数差所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复