zoukankan      html  css  js  c++  java
  • C语言小程序(三)、判断两个日期之差

    输入两个日期,计算之间相差多少天。 用了两种方法实现,第二种利用结构体,代码比较清晰,其余的都一样。

    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天。
    ",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天。
    ",days);
    	return 0;
    }

  • 相关阅读:
    数据库被黑后留下的数据
    cron(CronTrigger)表达式用法
    nodeJS常用的定时执行任务的插件
    css实现隐藏滚动条
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218670.html
Copyright © 2011-2022 走看看