首页 > 其他 > 详细

两个日期之间的日期数

时间:2016-01-06 13:40:59      阅读:196      评论:0      收藏:0      [点我收藏+]
#include <stdio.h>
#include <stdlib.h>

/*
	输入两个日期(年 月 日 年 月 日),
	输出这两个日期之间差多少天。
*/

int monthDays[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

int isGoodYear(int year);
int isGoodMonth(int month);
int isGoodDay(int year, int month, int day);
int isLeapYear(int year);
int dayOfYear(int year, int month, int day);
int daysBetweenYear(int year1, int year2);
int daysBetweenDays(int year1, int month1, int day1, int year2, int month2, int day2);

int main(){
	int year1, month1, day1, year2, month2, day2;
	while (fflush(stdin), scanf("%d%d%d%d%d%d",&year1,&month1,&day1,&year2,&month2,&day2)!=EOF){
		printf("%d\n",daysBetweenDays(year1,month1,day1,year2,month2,day2));
	}
	system("pause");
	return 0;
}

int daysBetweenDays(int year1, int month1, int day1, int year2, int month2, int day2){
	//日期1<日期二为负数
	//日期1>日期二为正数
	int days1 = dayOfYear(year1, month1, day1);
	int days2 = dayOfYear(year2, month2, day2);
	int days3 = daysBetweenYear(year1, year2);
	int totalDays = days2 + days3 - days1;
	return totalDays;
}

int daysBetweenYear(int year1, int year2){
	//year1 < year2为正数
	//year1 > year2为负数
	int maxYear = (year1 > year2) ? year1 : year2;
	int minYear = (year1 > year2) ? year2 : year1;
	int totalDays = 0;
	for (int i = minYear; i < maxYear; ++i)
		if (isLeapYear(i))
			totalDays += 366;
		else
			totalDays += 365;
	if (minYear == year1)
		return totalDays;
	else
		return -totalDays;
}

int dayOfYear(int year, int month, int day){//当年第几天
	int total = 0;
	for (int i = 0; i < month - 1; ++i)
		total += monthDays[i];
	total += day;
	if (isLeapYear(year) && (month > 2))
		total++;
	return total;
}

int isLeapYear(int year){
	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
		return 1;
	else
		return 0;
}

int isGoodYear(int year){
	if (year >= 1900)
		return 1;
	else
		return 0;
}

int isGoodMonth(int month){
	if ((month >= 1) && (month <= 12))
		return 1;
	else
		return 0;
}

int isGoodDay(int year, int month, int day){
	switch (month)
	{
	case 2:
		if (isLeapYear(year))
			if ((day >= 1) && (day <= 29))
				return 1;
			else if ((day >= 1) && (day <= 28))
				return 1;
			else
				return 0;
	case 4:
	case 6:
	case 9:
	case 11:
		if ((day >= 1) && (day <= 30))
			return 1;
		else
			return 0;
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		if ((day >= 1) && (day <= 31))
			return 1;
		else
			return 0;
	default:
		printf("month error in day judge.\n");
		return 0;
	}
}

  

两个日期之间的日期数

原文:http://www.cnblogs.com/mutaohengheng/p/5104952.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!