C语言实现两个日期之间有多少天

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

//判断是否闰年
bool ifleapyear(int n)
{
	if (((n % 4 == 0) && (n % 100 != 0)) || (n % 400 == 0))
	{
		return true;
	}
	return false;
}

int countYearDays(char *begin, char *end)
{
	int count = 0, i = 0, j = 0;
	int leapyear[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	int comyear[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	int beginyear = 0, beginmon = 0, beginday = 0;
	int endyear = 0, endmon = 0, endday = 0;
	sscanf(begin, "%d - %d - %d", &beginyear, &beginmon, &beginday);
	sscanf(end, "%d - %d - %d", &endyear, &endmon, &endday);

	for (i = beginyear; i < endyear + 1; i++)
	{
		if (ifleapyear(i))
		{
			if (beginyear == endyear)
			{
				if (beginmon == endmon)
				{
					count += (endday - beginday);
				}
				else
				{
					count += (leapyear[beginmon - 1] - beginday);
					count += endday;
					for (j = beginmon; j < endmon - 1; j++)
					{
						count += leapyear[j];
					}
				}
			}
			else
			{
				if (i == beginyear)
				{
					count += (leapyear[beginmon - 1] - beginday);
					for (j = beginmon; j < 12; j++)
					{
						count += leapyear[j];
					}
				}
				else if (i == endyear)
				{
					count += endday;
					for (j = 0; j < endmon - 1; j++)
					{
						count += leapyear[j];
					}
				}
				else
				{
					for (j = 0; j < 12; j++)
					{
						count += leapyear[j];
					}
				}
			}
		}
		else
		{
			if (beginyear == endyear)
			{
				if (beginmon == endmon)
				{
					count += (endday - beginday);
				}
				else
				{
					count += (comyear[beginmon - 1] - beginday);
					count += endday;
					for (j = beginmon; j < endmon - 1; j++)
					{
						count += comyear[j];
					}
				}
			}
			else
			{
				if (i == beginyear)
				{
					count += (comyear[beginmon - 1] - beginday);
					for (j = beginmon; j < 12; j++)
					{
						count += comyear[j];
					}
				}
				else if (i == endyear)
				{
					count += endday;
					for (j = 0; j < endmon - 1; j++)
					{
						count += comyear[j];
					}
				}
				else
				{
					for (j = 0; j < 12; j++)
					{
						count += comyear[j];
					}
				}
			}
		}
	}
	return count;
}

int main()
{
	printf("2011-11-18 2022-11-18 count=%d\n", countYearDays("2011-11-18", "2022-11-18"));
	printf("2018-11-18 2022-11-18 count=%d\n", countYearDays("2018-11-18", "2022-11-18"));
	printf("2015-11-18 2022-11-18 count=%d\n", countYearDays("2015-11-18", "2022-11-18"));
	printf("2000-11-18 2022-11-18 count=%d\n", countYearDays("2000-11-18", "2022-11-18"));
	printf("2022-10-1 2022-11-18 count=%d\n", countYearDays("2022-10-1", "2022-11-18"));
	printf("2022-11-1 2022-11-18 count=%d\n", countYearDays("2022-11-1", "2022-11-18"));
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值