编写一个函数,计算两个日期之间的时间差,并将其值返回。日期以年,月,日表示,时间差以天数表示,单位为天数。

编写一个函数,计算两个日期之间的时间差,并将其值返回。日期以年,月,日表示,时间差以天数表示,单位为天数。

思路:

假设较小的年份为2012年11月12日,到2023年7月24日;

  1. 2012年到2023年有2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,这些年份计数的话只有两种情况,润年366天,平年365天,这个只需我们用循环来判断是否是润年就好了,循环加起来求总数sum;
  2. 随后我们就计算2012年和2023年从1月1日到11月12日过了多少天,到7月24日过了多少天;
  3. 小的年份,我们用今年一整年的天数减去它过了多少天,让sum加上;
  4. 大的年份,我们用sum直接加上今年过了多少天;
  5. 随即得到的sum就是我们想要求的值;

*全过程都要注意润年的特殊情况!

下面是代码演示:

#include<stdio.h>
struct data{
		int year;
		int month;
		int day;
	}data[2];
typedef int N[2];
int dataDif(int q1,int w1,int e1,int q2,int w2,int e2){
	N y,m,d;
	y[0]=q1;y[1]=q2;
	m[0]=w1;m[1]=w2;
	d[0]=e1;d[1]=e2;
    int i,j,sum=0,count[2]={0,0},leap[2]={0,0};
    int n,h;//起始年份和结束年份
    int a[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	n=y[0];
	h=y[1];
	//计算间隔年份里的天数 
	 for(i=n+1;i<h;i++){
	 	if((i%400==0)||(i%100!=0&&i%4==0))
	 	sum+=366;
	 	else sum+=365;
	 }
	 //计算较小和较大年份,过了这一年多少天 
	 for(i=0;i<2;i++){
	 	if((y[1]%400==0)||(y[1]%100!=0&&y[1]%4==0))
		 {
		 a[2]=29;
		 leap[i]=1;
		 }
		for(j=1;j<m[i];j++){
			count[i]+=a[j];
		}
		count[i]+=d[i];
		 //较小
		 if(i==0){
		 	if(leap[i]==1)
		 		sum+=366-count[i];
			 else sum+=365-count[i];
		 } 
		 //较大 
		  if(i==1){
		 	if(leap[i]==1)
		 		sum+=count[i];
			 else sum+=count[i];
		 } 
	 }
	return sum;	
}
int main(){
	int i,dif;
	printf("请输入较小的日期和较大的日期:\n");
	printf("较小的日期(年月日,用空格分隔开):");
	scanf("%d %d %d",&data[0].year,&data[0].month,&data[0].day); 
	printf("较大的日期(年月日,用空格分隔开):");
	scanf("%d %d %d",&data[1].year,&data[1].month,&data[1].day);
	dif=dataDif(data[0].year,data[0].month,data[0].day,data[1].year,data[1].month,data[1].day);
	  printf("相差%d天",dif);
	    }

因为今天是2023年7月24日,所以我在日历上看到的是相差3906天

以下是运行成果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值