博客
关于我
求两个日期差值问题
阅读量:328 次
发布时间:2019-03-04

本文共 2252 字,大约阅读时间需要 7 分钟。

为了计算两个日期之间的天数,我们首先需要将输入的日期分解为年、月、日。然后,确定较小和较大的日期。接着,逐月、逐年地增加天数,直到达到较大的日期。需要考虑闰年的影响,尤其是2月的天数。通过循环处理每个月份的天数,当月份天数不足时,进入下一个月或年份。

步骤详解

  • 读取输入并分解日期

    • 读取两个日期字符串。
    • 分解为年、月、日。
  • 比较日期大小

    • 确定较小和较大的日期,作为开始和结束日期。
  • 初始化变量

    • sumDays 记录总天数。
    • month 数组存储每个月的天数。
  • 闰年判断

    • 编写函数 leapYear 判断闰年。
  • 月天数设置

    • 编写函数 setMonth 根据闰年设置2月的天数。
  • 计算天数

    • 使用循环逐月、逐年地增加天数,直到达到结束日期。
    • 处理月份和年份的变化,包括闰年影响的调整。
  • 输出结果

    • 打印计算得到的总天数。
  • 代码实现

    #include 
    #include
    using namespace std;
    bool leapYear(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
    return true;
    } else {
    return false;
    }
    }
    void setMonth(int year, int month[]) {
    if (leapYear(year)) {
    month[1] = 29;
    } else {
    month[1] = 28;
    }
    }
    void Compare(int &minDate, int &maxDate) {
    if (minDate > maxDate) {
    int temp = minDate;
    minDate = maxDate;
    maxDate = temp;
    }
    }
    int dateDifference(int month[], int year1, int year2, int month1, int month2, int day1, int day2) {
    int sumDays = 0;
    while (year1 != year2 || month1 != month2 || day1 != day2) {
    if (day2 <= month[month2]) {
    day2++;
    sumDays++;
    } else {
    if (month2 < 12) {
    month2++;
    day2 = 1;
    } else {
    year2++;
    setMonth(year2, month);
    month2 = 1;
    day2 = 1;
    }
    }
    }
    return sumDays;
    }
    int main() {
    int minDate, maxDate;
    cin >> minDate >> maxDate;
    Compare(minDate, maxDate);
    int maxYear = maxDate / 10000;
    int minYear = minDate / 10000;
    int month1 = (maxDate / 100) % 100;
    int month2 = (minDate / 100) % 100;
    int day1 = maxDate % 100;
    int day2 = minDate % 100;
    int month[13];
    setMonth(minYear, month);
    int sumDays = dateDifference(month, maxYear, minYear, month1, month2, day1, day2);
    cout << sumDays << endl;
    return 0;
    }

    代码解释

  • leapYear 函数:判断给定年份是否为闰年。闰年的条件是能被4整除但不能被100整除,或者能被400整除。

  • setMonth 函数:根据闰年判断,设置2月的天数为29或28。

  • Compare 函数:交换两个日期的大小顺序,确保 minDate 小于 maxDate

  • dateDifference 函数:计算两个日期之间的天数。使用循环逐月、逐年增加天数,直到达到结束日期,并处理月份和年份的变化。

  • main 函数

    • 读取输入并分解为年、月、日。
    • 比较日期大小并交换顺序。
    • 初始化月份天数数组。
    • 调用 dateDifference 函数计算天数。
    • 输出结果。
  • 通过这种方法,可以准确计算两个日期之间的天数,包括处理闰年和跨年的情况。

    转载地址:http://dumq.baihongyu.com/

    你可能感兴趣的文章
    MySQL集群解决方案(4):负载均衡
    查看>>
    MySQL高级-视图
    查看>>
    nacos集群搭建
    查看>>
    Nessus漏洞扫描教程之配置Nessus
    查看>>
    Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
    查看>>
    Netpas:不一样的SD-WAN+ 保障网络通讯品质
    查看>>
    Netty WebSocket客户端
    查看>>
    Netty工作笔记0011---Channel应用案例2
    查看>>
    Netty工作笔记0014---Buffer类型化和只读
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>