目录

  • 计算两个日期中间的天数
    • 计算逻辑
      • 处理闰年以及年月天数情况
      • 处理正常逻辑
        • 年月一致
        • 年一致,月不一致
        • 年月都不一致
  • 代码实现

计算两个日期中间的天数

日常刷题碰到的,有计算两个日期之间天数的,有计算两个日期工作日数目的。这一类题目逻辑上算不上太难。只是没碰到过的话,第一时间可能想不好怎么处理。这里贴出来一条计算方法。

计算逻辑

打个比方是2020.3.15-2020.5.5中间一共多少天?
首先是处理闰年,这是死方法,处理天数也是。

处理闰年以及年月天数情况

以下数组第一维用来判断是否是闰年

int monthdays[2][12] = { { 31,28,31,30,31,30,31,31,30,31,30,31 },{ 31,29,31,30,31,30,31,31,30,31,30,31 } };   //非闰年,2月28天,闰年2月29天int yeardays[2] = { 365,366 };    //非闰年365天,闰年366天int isLearyear(int year)   //判断闰年
{if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)return 1;elsereturn 0;
}

处理正常逻辑

年月一致

直接计算天数差别

  if (year1 == year2 && month1 == month2)   //假如年月一致{sumdays = day2 - day1;}

年一致,月不一致

比如3月5日到5月15日,我们可以先计算3月还剩余天数,然后计算其中整个的月的天数,再加上最后一个5月的15天。

if (year1 == year2)             //年份一样,月份不一致   2020.3.15  -2020.5.5    应该是51天
{sumdays += monthdays[isLearyear(year1)][month1-1] - day1; //第一个日期的当月剩余天数  3月剩余16天for (int i = month1; i < month2-1; i++)            //从第一个日期当月的第二个月开始计算剩余整月的天数    4月1日开始到5月1日 30天{sumdays += monthdays[isLearyear(year1)][i];}sumdays += day2;                                //5月天数     5.1-5.5 一共5天
}

年月都不一致

  1. 首先处理第一个日期当月到年底的整月的天数
  2. 计算两个日期中间整年天数
  3. 再加上第二个日期最后的整月的天数
  4. 最后加上第二个日期当月天数
sumdays += monthdays[isLearyear(year1)][month1-1] - day1;   //第一个日期当月剩余天数for (int i = month1; i < 12; i++)                      //第一个日期整月天数sumdays += monthdays[isLearyear(year1)][i];for (int i = year1 + 1; i < year2; i++)                     //两个日期中间整年天数sumdays += yeardays[isLearyear(i)];for (int i = 0; i < month2 - 1; i++)                 //第二个日期整月天数sumdays += monthdays[isLearyear(year2)][i];sumdays += day2;                                      //第二个日期当月天数

代码实现

#include<bits/stdc++.h>
using namespace std;int monthdays[2][12] = { { 31,28,31,30,31,30,31,31,30,31,30,31 },{ 31,29,31,30,31,30,31,31,30,31,30,31 } };   //非闰年,2月28天,闰年2月29天int yeardays[2] = { 365,366 };    //非闰年365天,闰年366天int isLearyear(int year)   //判断闰年
{if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)return 1;elsereturn 0;
}int caldays(int year1, int month1, int day1, int year2, int month2, int day2)
{int sumdays = 0;if (year1 == year2 && month1 == month2)   //假如年月一致{sumdays = day2 - day1;}else{if (year1 == year2)                  //年份一样,月份不一致   2020.3.15  -2020.5.5    应该是51天{sumdays += monthdays[isLearyear(year1)][month1-1] - day1;   //第一个日期的当月剩余天数  3月剩余16天for (int i = month1; i < month2-1; i++)                      //从第一个日期当月的第二个月开始计算剩余整月的天数    4月1日开始到5月1日 30天sumdays += monthdays[isLearyear(year1)][i];sumdays += day2;                                              //5月天数     5.1-5.5 一共5天}else                              //年月都不一样{sumdays += monthdays[isLearyear(year1)][month1-1] - day1;   //第一个日期当月剩余天数for (int i = month1; i < 12; i++)                      //第一个日期整月天数sumdays += monthdays[isLearyear(year1)][i];for (int i = year1 + 1; i < year2; i++)                     //两个日期中间整年天数sumdays += yeardays[isLearyear(i)];for (int i = 0; i < month2 - 1; i++)                 //第二个日期整月天数sumdays += monthdays[isLearyear(year2)][i];sumdays += day2;                                      //第二个日期当月天数}}return sumdays;
}int main()
{int year1, month1, day1, year2, month2, day2;cin >> year1 >> month1 >> day1 >> year2 >> month2 >> day2;int days = caldays(year1, month1, day1, year2, month2, day2);cout << days << endl;return 0;
}

效果如下:

算法笔记之旅 | 日期之间天数计算相关推荐

  1. Layui日期选择器+两个日期之间天数计算

    Layui日期选择器+天数计算 下面这个图片就是我们Layui双控组件的日期范围选择器,可以选择起始时间和终止时间,那么针对于这个组件我们该怎么获取它的具体天数呢? 首先:我的需求是是要年-月-日的格 ...

  2. 日期转天数的程序c语言,两个日期之间天数的计算C语言程序

    <两个日期之间天数的计算C语言程序>由会员分享,可在线阅读,更多相关<两个日期之间天数的计算C语言程序(5页珍藏版)>请在人人文库网上搜索. 1.两个日期之间天数的计算 C 语 ...

  3. java计算两个日期之间天数

    java计算两个日期之间天数 jxts = DateFunction.getNumberOfDays(jxErq, qsjxrq); public static long getNumberOfDay ...

  4. java 根据日期获取天数,java获取日期之间天数的方法

    java获取日期之间天数的方法 本文实例讲述了java获取日期之间天数的方法.分享给大家供大家参考.具体实现方法如下: private int daysBetween(Date now, Date r ...

  5. python计算两个日期的天数计算多少岁

    计算出生日期天数,计算两个日期之间天数,计算多少岁,获取两个日期之间的日期列表 安装datedays: pip install datedays import datedaysif __name__ ...

  6. java 根据日期获取天数_java获取日期之间天数的方法

    //获取两个日期之间的天数 private int daysBetween(Date now, Date returnDate) { Calendar cNow = Calendar.getInsta ...

  7. js 日期 加天数计算

    js 日期 加天数计算 AddDate=(date, days)=> {//日期计算if (!days) {days = 1;}var date = new Date(date);date.se ...

  8. php做一个计算日期之间天数,PHP计算任意两个日期之间的天数

    PHP面试题中,关于日期的题目作为基础考题经常出现,下面讨论一下获取两个日期之间的天数的方法. 收到一个答案,拆分年.月.日,分别进行减法,然后统计天数,好累. 针对低版本的PHP可以用下面的方式搞定 ...

  9. Python 计算两个日期之间天数

    关注RPA请访问网站: www.i-search.com.cn 学Python,用RPA,欢迎下载使用 www.i-search.com.cn/index.html?from=line1 有的时候要统 ...

最新文章

  1. TCP的三次握手和四次分手
  2. 【虚拟机】虚拟机(Vmware)怎么进入BIOS
  3. 【Django】模型层说明
  4. SpringBoot项目启动时:Failed to initialize connector [Connector[HTTP/1.1-8080]]
  5. inittab脚本启动解析 (zz)
  6. 流体式布局与响应式布局_将固定像素设计转换为流体比例布局
  7. flex java 全局拦截_Flex CSS阻止底层内容
  8. android dao设计模式,DAO设计模式
  9. 树链剖分边权模板spoj375
  10. Node.js视频教程
  11. 新益华基层医疗系统使用方法_MongoDB for VS Code:使用Mongo的新方法
  12. ubuntu下载软件创建桌面快捷方式
  13. 漫谈CRM体系化建设3:如何留住客户
  14. 清华EMBA课程系列思考之一 -- Techmark课程带给管理者的思考
  15. 微商个人相册多端小程序源码
  16. 清华计算机系与姚班,清华“姚班”,计算机专业学子们无比向往的班级
  17. VMware 安装Mac os 10.11 苹果系统
  18. LBS的概念、历史、现状与未来(一)
  19. 稀里糊涂地被评为博客之星的候选人了,那就麻烦大家帮忙投个票吧~
  20. 02-k8s资源管理与实战入门

热门文章

  1. 软件质量保重与测试期末,保重啊!PM2.5实时查询软件App大集合
  2. 【※2岁女童被同学连咬9口就在老师走后3分钟※】
  3. 究竟Python语言有什么神奇之处,让它如此火爆?
  4. 宾馆英语·预订房间(zt)
  5. openssh升级至8.0
  6. 发现问题和解决问题若干
  7. USB摄像头驱动--LCD显示摄像头图像(附Makefile分析)
  8. ICEM软件学习笔记
  9. PHP 鸟哥:我也曾经是“不适合”编程的人
  10. Android应用相互启动