加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C给定日期和今天日期之间的天数

发布时间:2020-12-16 10:12:09 所属栏目:百科 来源:网络整理
导读:我有一个名为int differenceDatesInDays(string date)的函数. 此函数应获取字符串值作为日期(YYYY-MM-DD)并将其与今天日期进行比较. 我不知道STL中是否有东西,我找不到匹配的算法.我刚刚发现boost有一个解决方案,但我不想使用boost. 所以,到目前为止这是我的
我有一个名为int differenceDatesInDays(string& date)的函数.
此函数应获取字符串值作为日期(YYYY-MM-DD)并将其与今天日期进行比较.

我不知道STL中是否有东西,我找不到匹配的算法.我刚刚发现boost有一个解决方案,但我不想使用boost.

所以,到目前为止这是我的代码:

int differenceDatesInDays(string& date) {
    string year = date.substr(0,4);
    string month = date.substr(5,2);
    string day = date.substr(8,string::npos);

    int y = stoi(year);
    int m = stoi(month);
    int d = stoi(day);

    time_t time_now = time(0);
    tm* now = localtime(&time_now);

    int diffY = y - (now->tm_year + 1900);
    int diffM = m - (now->tm_mon + 1);
    int diffD = d - (now->tm_mday);

    int difference = (diffY * 365) + (diffM * 30) + diffD;

    return difference;
}

我不知道如何确定这个月是30天,31天还是28天.

解决方法

沿着这些方向,也许是:

int differenceDatesInDays(string& date) {
    // Parse `date` as in your code
    int y = ...;
    int m = ...;
    int d = ...;

    tm then = {0};
    then.tm_year = y - 1900;
    then.tm_mon = m - 1;
    then.tm_day = d;
    time_t then_secs = mktime(&then);

    time_t time_now = time(0);
    tm* now = localtime(&time_now);
    tm today = {0};
    today.tm_year = now->tm_year;
    today.tm_mon = now->tm_mon;
    today.tm_day = now->tm_day;
    time_t today_secs = mktime(&today);

    return (today_secs - then_secs) / (24*60*60);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读