C语言计算两个时间的天数差

文章介绍了如何通过编程计算两个给定日期之间的天数差异,特别考虑了闰年的规则,如2019年不是闰年,而2020年是。函数`days_passed`用于计算给定日期当年的天数,`diff_day`函数则处理跨年情况,包括闰年的额外天数加法。
摘要由CSDN通过智能技术生成

比如:开始日期2019/2/28,结束日期2022/8/9

先计算2/28这个日期在2019年里走过了多少天,再计算8/9这个日期在2022年里走过了多少天,判断2019年为平年,一年365天,此时,用365 - 走过的天数 + 8/9在2022年里走过的天数,这两个日期中间还相隔两年,计算这两个年份是否为闰年,2020为闰年则多+1,2021年为平年则不需要多+1。

struct DATE
{
   int year;  
   int mon;  
   int day;   
};

// 判断是否是闰年
#define __isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))

int days_passed(struct DATE date) //该年过去了多少天
{
    const int days[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
    return days[date.mon-1] + date.day + (date.mon > 2 && __isleap(date.year));
}
int diff_day(struct DATE start_da, struct DATE end_da) 
{
	int sum_day = 0;
	int mid_year = 0;
	int i = 0;

    int days1 = dev_rtc_days_passed(start_da);
    int days2 = dev_rtc_days_passed(end_da);
    int whole_year = end_da.year - start_da.year;
	
	if(whole_year >= 1)
	{
		if(__isleap(start_da.year))
		{
			sum_day = (366 - days1) + days2;
		}
		else
		{
			sum_day= (365 - days1) + days2;
		}
		for(mid_year = start_da.year + 1; mid_year < end_da.year; mid_year++)
		{
			if(__isleap(mid_year))
			{
				i++;
			}
		}
		sum_day += (whole_year - 1) * 365 + i;//中间年份为闰年的+1
	}
	else if(whole_year == 0)//两个日期在同一年份的直接相减
	{
		sum_day = days2 - days1;
	}

    return sum_day; //返回两个日期相差的天数
}
int main(void)
{
    struct DATE start_da;
    struct DATE end_da;
    int sum_day = 0;

    start_da.year = 2019;
    start_da.mon = 2;
    start_da.day = 28;
    end_da.year = 2021;
    end_da.mon = 3;
    end_da.day = 1;

    sum_day = diff_day(start_da, end_da) ;
    
    printf("sum_day = %d",sum_day);
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值