C language to judge the number of days difference between two dates considering leap year

#include<stdio.h>
int main()
{
    
    
	/*
		输入两个日期(年月日),计算两个日期相差的天数(要考虑闰年)
	*/
	/*
		算法思路:
			先计算两个日期之间整年的天数,
			比如要计算1993年3月14日到1996年5月3日之间的天数:
			则先计算1994年和1995年这两年的总天数:yearDays,
			然后计算96年1月1日到96年5月3日的天数:num,
			再计算93年3月14日到93年12月31日的天数:n。
			则两个日期相差的天数等于yearDays+num+n。

			若遇到特殊情况:输入的两个日期为同一年,则最后另外处理(看代码)。
	*/
	printf("请输入两个日期:");
	int year = 0, month = 0, day = 0;// 小日期
	int year2 = 0, month2 = 0, day2 = 0;// 大日期
	int	days = 0,yearDays=0,num=0,n=0;
	int i = 0;
	int months[] = {
    
     31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	scanf_s("%d %d %d,%d %d %d", &year,&month,&day,&year2,&month2,&day2);

	// 先计算中间年份的总天数
	for (i=(year+1);i<year2;i++)
	{
    
    
		// 判断是否为闰年
		if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
		{
    
    // 是闰年
			yearDays += 366;
		}
		else
		{
    
    // 不是闰年
			yearDays += 365;
		}
	}
	// 判断大日期那年是否是闰年
	if ((year2 % 4 == 0 && year2 % 100 != 0) || year2 % 400 == 0)
	{
    
    // 是闰年
		months[1] = 29;
		// 计算大日期那年月日距离大日期那年第一天多少天
		for (i = 0; i < (month2 - 1); i++)
		{
    
    
			num += months[i];
		}
		num = num + day2;
	}
	else
	{
    
    //不是闰年
		months[1] = 28;
		// 计算大日期那年月日距离大日期那年第一天多少天
		for (i = 0; i < (month2 - 1); i++)
		{
    
    
			num += months[i];
		}
		num = num + day2;
	}
	// 判断小日期那年是否是闰年
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
	{
    
    //是闰年
		months[1] = 29;
		// 计算小日期那年的月日距离小日期那年第一天多少天
		for (i=0;i<(month-1);i++)
		{
    
    
			n += months[i];
		} 
		n = n + day;
		n = 366 - n;
	}
	else
	{
    
    // 不是闰年
		months[1] = 28;
		// 计算小日期那年的月日距离小日期那年第一天多少天
		for (i = 0; i < (month - 1); i++)
		{
    
    
			n += months[i];
		}
		n = n + day;
		n = 365 - n;
	}
	days = yearDays + num + n;
	//特殊情况特殊处理:输入的两个年份相同
	if (year == year2)
	{
    
    
		// 判断是否为闰年
		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
		{
    
    // 是闰年
			n = 366 - n;
		}
		else
		{
    
    // 不是闰年
			n = 365 - n;
		}
		if (num > n)
		{
    
    
			days = num - n;
		}
		else
		{
    
    
			days = n - num;
		}
	}
	printf("两个日期相差%d天\n",days);
	return 0;
}

Example:
insert image description here

If you have a better implementation method, please briefly describe your ideas in the comment area.

Guess you like

Origin blog.csdn.net/qq_42432673/article/details/129228085