计算两个日期之间的天数

文章提供了一个C语言程序,该程序接收两个8位正整数表示的日期,其中前4位是年份,中间2位是月份,最后2位是日期。程序通过计算判断两个日期之间的天数差,例如20170901到20200510共有983天。程序中包含了对日期有效性的检查以及对闰年的处理。
摘要由CSDN通过智能技术生成

题目:用一个8位正整数表示日期,其中前4位表示年,中间2位表示月,最后2位表示日。
例如:20170901表示2017年9月1日
      20200510表示2020年5月10日
      程序计算两个日期之间的天数。 
      程序运行结果为:
      20170901-20200510共有983天


代码如下:


#include <stdio.h>

static int valid_date(int date)
{
    int year,month,day;
    int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //1到12月的天数
    year=date/10000;
    month=date/100%100;
    day=date%100;
    if(month>12)
        return 2; //如果月份大于一年,输出2
    mon[1]+=(year%4==0 && year%100!=0 || year%400==0);
    return day>mon[month-1]; //如果天数大于当月,输出1
}
int validm()
{
    int first=20170901,last=20200510;
    int year,month,day,val,days;   
	days=0;
    year=first/10000;
    month=first/100%100;
    day=first%100;
	days++;
	for(val=first;val<last;val=year*10000+month*100+day)
	{
		if(valid_date(val)==2) //如果月份大于年份,年份进一位,并重置月份
		{
			year++;
			month=1;
		}
		else if(valid_date(val)==1) //如果天数大于月份,月份进一位,并重置天数
		{
			month++;
			day=1;
		}
		else //其余正常情况,天数加1
		{
			day++;
			days++;
		}
	}
    printf("%u-%u共有%d天\n",first,last,days);
	getchar();
    return 0;
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值