zoukankan      html  css  js  c++  java
  • 计算两个日期之间相差的天数

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

    思路:分别计算两个日期到当前年初第一天的天数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:
    ");
        int date1,date2;
        scanf("%d%d",&date1,&date2);
        printf("两个日期之间相差天数为:%d
    ",intdiffDays(date1,date2));
        return 0;
    }
  • 相关阅读:
    帝国cms更新报错解决办法
    帝国cms 不能正常显示最新文章
    帝国CMS Table '***.phome_ecms_news_data_' doesn't exist
    【C++】C++中的字符和字符串
    【Python】 解析Python中的运算符
    【C++】C++中的数组
    【Python】解析Python的缩进规则
    【python】解析Python的安装和配置
    【Zend Studio】在Zend Studio中调试ThinkPhp框架
    【C++】C++中typedef、auto与decltype的作用
  • 原文地址:https://www.cnblogs.com/newpanderking/p/3876587.html
Copyright © 2011-2022 走看看