计算两个日期之间相差的天数

简介:

如题,面试题中的一道编程题,随便给定两个日期,不适用日期库函数计算两个日期之间相差的天数。

思路:分别计算两个日期到当前年初第一天的天数days1,days2,然后计算两个日期相差年数(左闭右开 [)  )的天数days.

那么两个日期相差的天数即为days+days2-days1.

代码如下:

复制代码
/*************************************************************************
    > Created Time: 2014年06月17日 星期二 23时22分34秒
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>

//日期的天数
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//判断闰年
bool check_leap_year(int year)
{
    if((year%100!=0 && year%4==0)||year%400==0)return true;
    else return false;
}
//获取年月日
void getDate(int date,int &year,int &month,int &day)
{
    day = date%100;
    date /=100;
    month = date%100;
    year = date/100;
}
//获取到年初的天数
int getdaysfrom(int year,int month1,int day)
{
    if(check_leap_year(year))month[2]=29;
    else month[2]=28;
    int total=0;
    for(int i = 1; i < month1; i++)
    total += month[i];
    total += day;
    return total;
}

//日期格式为 yyyymmdd
//思路,求出日期到当前年初的天数a1,a2,然后求出两个日期相差的年的天数n
//n+a2-a1
int intdiffDays(int date1,int date2)
{
    if(date1<=0||date1<=0||date2>99999999||date2>99999999)return 0;    
    if(date1 > date2)
    {
        date1 = date1+date2;
        date2 = date1-date2;
        date1 = date1-date2;
    }
    int year1,year2,month1,month2,day1,day2;
    getDate(date1,year1,month1,day1);
    getDate(date2,year2,month2,day2);

    int days=0;
    for(int i=year1; i<year2; i++ )
    {
        if(check_leap_year(i))
        days += 366;
        else days += 365;
    }
    int n1 = getdaysfrom(year2,month2,day2);
    int n2 = getdaysfrom(year1,month1,day1);
    return (days + n1 - n2);

}
int main()
{
    printf("请输入两个日期,格式为YYYMMDD:\n");
    int date1,date2;
    scanf("%d%d",&date1,&date2);
    printf("两个日期之间相差天数为:%d\n",intdiffDays(date1,date2));
    return 0;
}
复制代码

 










本文转自NewPanderKing51CTO博客,原文链接: http://www.cnblogs.com/newpanderking/p/3876587.html,如需转载请自行联系原作者

相关文章
|
5月前
指定月份计算最大天数
指定月份计算最大天数
|
5月前
31.假定2007年的一月一日是星期一,输入一个时间(包含年、月、日),求出它是星期几。
31.假定2007年的一月一日是星期一,输入一个时间(包含年、月、日),求出它是星期几。
39 0
|
5月前
|
Linux C++ iOS开发
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
90 0
|
5月前
|
Linux
计算当前时间距离1970年的秒数
计算当前时间距离1970年的秒数
计算日期到天数的换算
1.题目概述 2.题解 思路分析 具体实现
55 0
计算日期到天数转换
计算日期到天数转换
98 0
7-1 时间换算(15分)
本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。
147 0
计算年月天数
计算年月天数
84 0
计算LocalDate之间的天数差,方便快捷
计算LocalDate之间的天数差,方便快捷
306 0
计算两个字符串类型的日期相差的天数或者小时数,计算日期字符串到今天的年龄
计算两个字符串类型的日期相差的天数或者小时数,计算日期字符串到今天的年龄
166 0