【C++】 求两string日期间隔天数

#include <iostream>
#include <string>
#include <stdlib.h>

 
using namespace std;

 
const int MOUTHDAYS[12]{31,28,31,30,31,30,31,31,30,31,30,31};

 
//返回某年某月天数
int inline MouthDays(int mouth,int year)
{
    if(year%4 == 0)
        if(mouth == 2)
            return 29;
    return  MOUTHDAYS[mouth-1];
}

 
//将string转为3个int值
void inline Transformation(string str,int &year,int &mouth,int &day)
{
    int flag1 = str.find("/");
    year = atoi(str.substr(0,flag1).c_str());
    str = str.substr(flag1+1);
 
    int flag2 = str.find("/");
    mouth = atoi(str.substr(0,flag2).c_str());
    str = str.substr(flag2+1);
 
    day = atoi(str.c_str());
}

 
int DataMinus(string str1,string str2)
{
    int year1,year2;
    int mouth1,mouth2;
    int day1,day2;

 
    Transformation(str1,year1,mouth1,day1);
    Transformation(str2,year2,mouth2,day2);

 
    int num = 0;//总天数统计

 
    //统一日期
    num += MouthDays(mouth1,year1)-day1;
    mouth1++;
    num += day2;

 
    //统一月份
    for(int i = mouth1;i<=12;i++)
        num += MouthDays(i,year1);
    year1++;
    for(int i = mouth2-1;i>=1;i--)
        num += MouthDays(i,year2);

 
    //按年份计算天数
    for(int i = year1;i<year2;i++)
    {
        if(i%4 == 0)
            num += 366;
        else
            num += 365;
    }

 
    return num;
}

 
int main()
{
    string str1("1996/8/24");
    string str2("2016/4/12");
    cout << DataMinus(str1,str2) << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值