易语言实地培训长期招生 QQ1615457736

乐易论坛

 找回密码
 立即注册

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

导航
导航
培训
培训
产品
产品
易歪歪客服聊天助手——永久免费阿里云服务器最高¥1888云产品通用代金券我要租广告
易歪歪客服聊天助手——永久免费阿里云服务器低至10元/月我要租广告
易歪歪客服聊天助手——永久免费最高2000云产品通用代金券我要租广告
查看: 4317|回复: 0
收起左侧

很久没发帖了 来一个C++的diffday

[复制链接]
  • TA的每日心情

    2019-5-9 10:31
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    发表于 2017-7-25 09:24:41 | 显示全部楼层 |阅读模式

    乐易编程网免费注册!抓住机会哦!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    因为C++很多功能都是需要自己写的  比如计算2个日期的天数,没有直接的api调用  所以我就自己写了一个

    //IsLeap函数判断一个年份是否为闰年,方法如下:
    bool IsLeap(int year)
    {
            return (year % 4 == 0 || year % 400 == 0) && (year % 100 != 0);
    }

    //上面的StringToDate函数用于取出日期中的年月日并判断日期是否合法
    //从字符中最得年月日 规定日期的格式是yyyy-mm-dd
    bool StringToDate(string date, int& year, int& month, int& day)
    {
            year = atoi((date.substr(0, 4)).c_str());
            month = atoi((date.substr(5, 2)).c_str());
            day = atoi((date.substr(8, 2)).c_str());
            int DAY[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            if (IsLeap(year)){
                    DAY[1] = 29;
            }
            return year >= 0 && month <= 12 && month > 0 && day <= DAY[month] && day > 0;
    }

    //DayInYear能根据给定的日期,求出它在该年的第几天,代码如下
    int DayInYear(int year, int month, int day)
    {
            //int _day = 0;
            int DAY[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            if (IsLeap(year))
                    DAY[1] = 29;
            for (int i = 0; i < month - 1; ++i)
            {
                    day += DAY[i];
            }
            return day;
    }

    int DaysBetween2Date(string date1, string date2)
    {
            //取出日期中的年月日
            int year1, month1, day1;
            int year2, month2, day2;
            if (!StringToDate(date1, year1, month1, day1) || !StringToDate(date2, year2, month2, day2))
            {
                    cout << "输入的日期格式不正确";
                    return -1;
            }
            if (year1 == year2 && month1 == month2)
            {
                    return day1 > day2 ? day1 - day2 : day2 - day1;

                    //如果年相同
            }
            else if (year1 == year2)
            {
                    int d1, d2;
                    d1 = DayInYear(year1, month1, day1);
                    d2 = DayInYear(year2, month2, day2);
                    return d1 > d2 ? d1 - d2 : d2 - d1;

                    //年月都不相同
            }
            else{
                    //确保year1年份比year2早
                    if (year1 > year2)
                    {
                            //swap进行两个值的交换
                            swap(year1, year2);
                            swap(month1, month2);
                            swap(day1, day2);
                    }
                    int d1, d2, d3;
                    if (IsLeap(year1))
                            d1 = 366 - DayInYear(year1, month1, day1); //取得这个日期在该年还于下多少天
                    else
                            d1 = 365 - DayInYear(year1, month1, day1);
                    d2 = DayInYear(year2, month2, day2); //取得在当年中的第几天
                    //        cout << "d1:" << d1 << ", d2:" << d2;

                    d3 = 0;
                    for (int year = year1 + 1; year < year2; year++)
                    {
                            if (IsLeap(year))
                                    d3 += 366;
                            else
                                    d3 += 365;
                    }
                    return d1 + d2 + d3;
            }
    }


    int _tmain(int argc, _TCHAR* argv[])
    {
           
            int a = DaysBetween2Date("2017-07-24", "2017-07-23");
            cout << "2010-11-11到2011-11-11相差 " << a << " 天";

            while (true)
            {
                    Sleep(100);
            }

            return 0;
    }



    记得导入iostom库哦

    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    乐易推荐上一条 /6 下一条

    QQ|网站地图|Archiver|手机版|小黑屋|乐易论坛 ( 湘ICP备19007035号-2 )

    GMT+8, 2019-10-20 19:51 , Processed in 0.107733 second(s), 77 queries .

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表