C语言小程序(三)、判断两个日期之差
2013-07-21 21:09
260 查看
输入两个日期,计算之间相差多少天。 用了两种方法实现,第二种利用结构体,代码比较清晰,其余的都一样。
1.普通的写法
2.利用结构体,代码更整洁一些
1.普通的写法
#include <stdio.h> int leapyear(int year) { if((year%4==0 && year%100!=0) || year%400==0) return 1; else return 0; } int days(int *day1, int *day2) { int i=0; int *tmp; int diff = 0; const int month[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++; } return diff; } int main() { int day1[3], day2[3]; int day = 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); return 0; }
2.利用结构体,代码更整洁一些
#include <stdio.h> typedef struct date { int year; int month; int day; }DATE; int leapyear(int year) { if((year%4==0 && year%100!=0) || year%400==0) return 1; else return 0; } int compare(DATE *d1, DATE *d2) //如果第一个日期比第二个日期大,交换日期 { DATE *tmp; if(d1->year == d2->year) //年数相等 { if(d1->month > d2->month) //月数相等 { tmp = d1; d1 = d2; d2 = d1; } else if(d1->month == d2->month) //日期相等 { if(d1->day > d2->day) { tmp = d1; d1 = d2; d2 = d1; } } } else if(d1->year > d2->year) { tmp = d1; d1 = d2; d2 = tmp; } return 0; } int diff(DATE *date1, DATE *date2) { int i; int diff = 0; const int month[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++; } return diff; } int main() { int days = 0; DATE day1, 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); return 0; }
相关文章推荐
- C语言小程序 如何判断两个日期之差
- C语言小程序(三)、判断两个日期之差
- 封装一类Java对象,用户从输入对话框输入两个日期,程序将判断两个日期的天数差
- C语言编写的计算两个日期之间天数的程序
- java--封装一类Java对象,用户从输入对话框输入两个日期,程序将判断两个日期的大小关系(比如输出:您输入的第二个日期大于第一个日期)以及两个日期之间的间隔天数(比如输出:2006年6月6日和
- 版本控制, C语言的两个宏, __DATE__, __TIME__, VS2005带参运行程序
- c++程序 计算两个日期相差的天数
- 如何判断两个日期在一周内
- js中判断由字符串from和to代表的两个日期的先后关系
- SQL判断两个日期时间区间是否有相交
- 通常在C#中判断两个日期是否相等可使用DateTime的方法
- 判断两个链表是否相交,若相交,求交点。(假设链表不带环)(C语言)
- C#判断两个日期是否在同一周,某日期是本月的第几周
- c语言判断是否素数程序代码
- java 程序题 判断两个字符串是否是同构的(isIsomorphic)
- Shell脚本执行hive语句 | hive以日期建立分区表 | linux schedule程序 | sed替换文件字符串 | shell判断hdfs文件目录是否存在
- C语言根据日期判断星期几
- C语言工具宏的小合集(包括获取程序编译日期和时间等)
- C语言之数组设数组a包括10个整型元素,用C语言编程序,求出数组a中相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。
- 设计一个程序输入两个日期计算相隔多少天,或计算一个日期加上间隔后的日期。