C语言小程序如何判断两个日期之差
2023-06-13 09:15:03 时间
1.普通的写法
复制代码代码如下:
#include<stdio.h>
intleapyear(intyear)
{
if((year%4==0&&year%100!=0)||year%400==0)
return1;
else
return0;
}
intdays(int*day1,int*day2)
{
inti=0;
int*tmp;
intdiff=0;
constintmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(day1[0]==day2[0])
{
if(day1[1]==day2[1])
{
diff=day1[2]-day2[2];
diff=(diff<0)?(-diff):diff;
}
else
{
if(day1[1]<day2[1]) //day1=1991-5-8 day2=1991-6-2
{
tmp=day1; //day1=1991-6-2 day2=1991-5-8
day1=day2;
day2=tmp;
}
for(i=day2[1]+1;i<day1[1];i++)
{
diff+= month[i];
}
diff+=month[day2[1]]-day2[2]+day1[2];
if(day2[1]<=2&&day1[1]>2)
if(leapyear(day2[0]))
diff++;
}
}
else
{
if(day1[0]<day2[0])
{
tmp=day1;
day1=day2;
day2=tmp;
}
for(i=day2[0]+1;i<day1[0];i++)
{
if(leapyear(i))
diff+=366;
else
diff+=365;
}
for(i=day2[1]+1;i<=12;i++) //day1=1992-1-1 day2=1991-1-1
{
diff+=month[i];
}
diff+=(month[day2[1]]-day2[2]);
if(day2[1]<=2)
if(leapyear(day2[0]))
diff++;
for(i=1;i<day1[1];i++)
{
diff+=month[i];
}
diff+=day1[2];
if(day1[1]>2)
if(leapyear(day1[0]))
diff++;
}
returndiff;
}
intmain()
{
intday1[3],day2[3];
intday=0;
printf("输入日期:");
scanf("%d-%d-%d",&day1[0],&day1[1],&day1[2]);
printf("输入另一个日期:");
scanf("%d-%d-%d",&day2[0],&day2[1],&day2[2]);
day=days(day1,day2);
printf("两个日期之间共有%d天。\n",day);
return0;
}
2.利用结构体,代码更整洁一些
#include<stdio.h>
typedefstructdate
{
intyear;
intmonth;
intday;
}DATE;
intleapyear(intyear)
{
if((year%4==0&&year%100!=0)||year%400==0)
return1;
else
return0;
}
intcompare(DATE*d1,DATE*d2) //如果第一个日期比第二个日期大,交换日期
{
DATE*tmp;
if(d1->year==d2->year) //年数相等
{
if(d1->month>d2->month) //月数相等
{
tmp=d1;
d1=d2;
d2=d1;
}
elseif(d1->month==d2->month) //日期相等
{
if(d1->day>d2->day)
{
tmp=d1;
d1=d2;
d2=d1;
}
}
}
elseif(d1->year>d2->year)
{
tmp=d1;
d1=d2;
d2=tmp;
}
return0;
}
intdiff(DATE*date1,DATE*date2)
{
inti;
intdiff=0;
constintmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(date1->year==date2->year)
{
if(date1->month==date2->month)
{
diff=date2->day-date1->day;
}
else
{
for(i=date1->month+1;i<date2->month;i++)
{
diff+=month[i];
}
diff+=month[date1->month]-date1->day+date2->day;
if(leapyear(date1->year))
if(date1->month<=2&&date2->month>2)
diff++;
}
}
else
{
for(i=date1->year+1;i<date2->year;i++)
{
if(leapyear(i))
diff+=366;
else
diff+=365;
}
for(i=date1->month+1;i<=12;i++) //date1距离年末多少天
{
diff+=month[i];
}
diff+=month[date1->month]-date1->day;
if(date1->month<=2)
if(leapyear(date1->year))
diff++;
for(i=1;i<date2->month;i++) //date2距离年初多少天
{
diff+=month[i];
}
diff+=date2->day;
if(date1->month>2)
if(leapyear(date2->year))
diff++;
}
returndiff;
}
intmain()
{
intdays=0;
DATEday1,day2;
DATE*date1,*date2;
date1=&day1;
date2=&day2;
printf("输入日期:");
scanf("%d-%d-%d",&(date1->year),&(date1->month),&(date1->day));
printf("输入另一个日期:");
scanf("%d-%d-%d",&date2->year,&date2->month,&date2->day);
compare(date1,date2);
days=diff(date1,date2);
printf("两个日期之间共有%d天。\n",days);
return0;
}
相关文章
- c语言中按位异或的作用,C语言 按位异或实现加法(示例代码)
- C语言循坏结构程序设计相关知识【C语言学习笔记】
- C语言思维导图
- 深入理解C语言static关键字的三个作用
- C语言的三个经典题目:三步翻转法、杨氏矩阵、辗转相除法
- C语言的重要性和学习目标
- 函数及其使用注意事项,C语言函数及使用注意事项详解
- 如何使用C语言连接Oracle数据库(c怎么连接oracle)
- 「Linux开发必备」:C语言下的IDE工具汇总(linux下c开发ide)
- 使用C语言搭建MySQL数据库API(c语言mysql api)
- C语言中如何使用MySQL(c 中怎么引用mysql)
- MySQL中C语言实现动态绑定变量的方法(c mysql 绑定变量)
- C语言程序可视化MySQL数据库信息(c mysql数据库显示)
- MySQL并发下的C语言修改技巧(c mysql 并发修改)
- C语言无法连接Oracle数据库(c 连接不到oracle)
- C语言游戏必备:光标定位与颜色设置的实现方法