C++编写两个时间点相差多少天的程序

今天突发奇想想要编写一个关于两个时间点相差多少天的程序,在网上参考了许多,其中有一个程序最有趣,和大家一起分享,代码如下:

#include"iostream"
using namespace std;


int day_Diff(int year_start, int month_start, int day_start, int year_end, int month_end, int day_end)
{
	int y2 = 0, m2 = 0, d2 = 0;
	int y1 = 0, m1 = 0, d1 = 0;
//该算法总体思想是计算给定日期到 0年3月1日的天数,然后相减,获取天数的间隔。
	m1 = (month_start + 9) % 12;
	//m1 = (month_start + 9) % 12; 用于判断日期是否大于3月(2月是判断闰年的标识),还用于纪录到3月的间隔月数。
	
	y1 = year_start - m1 / 10;
	//y1 = year_start - m1/10; 如果是1月和2月,则不包括当前年(因为是计算到0年3月1日的天数)。
	
	d1 = 365 * y1 + y1 / 4 - y1 / 100 + y1 / 400 + (m1 * 306 + 5) / 10 + (day_start - 1);
	//365*y1 是不算闰年多出那一天的天数,y1/4 - y1/100 + y1/400  是加所有闰年多出的那一天,可以验证其正确性,所有的闰年.
	//(m1*306 + 5)/10 用于计算到当前月到3月1日间的天数,306=365-31-28(1月和2月),5是全年中不是31天月份的个数,可以有验证正确,这也是数学的魅力,知识的重要性。
    //(day_start - 1) 用于计算当前日到1日的间隔天数。

	m2 = (month_end + 9) % 12;
	y2 = year_end - m2 / 10;
	d2 = 365 * y2 + y2 / 4 - y2 / 100 + y2 / 400 + (m2 * 306 + 5) / 10 + (day_end - 1);

	return (d2 - d1);
}

int main() {
	
	int year_start,  month_start,  day_start,  year_end,  month_end,  day_end;
	cout << "初始时间:" << endl;
	cin >> year_start;
	cin >> month_start;
	cin >> day_start;
	cout << "末尾时间:" << endl;
	cin >> year_end;
	cin >> month_end;
	cin >> day_end;
	cout << "两时间段相差为:"<< day_Diff(year_start, month_start, day_start, year_end, month_end, day_end) << endl;

	system("pause");
	return 0;
}

发布了22 篇原创文章 · 获赞 21 · 访问量 1401

猜你喜欢

转载自blog.csdn.net/qq_43751200/article/details/103413126