C++写的一个计算两个日期之间天数的小程序:

  1. #include <Windows.h>
  2. #include <stdio.h>
  3. struct tagDate
  4. {
  5. int year;
  6. int month;
  7. int day;
  8. };
  9. //设置日期
  10. void SetDate(int y, int m, int d, tagDate *date)
  11. {
  12. date->year = y;
  13. date->month = m;
  14. date->day = d;
  15. }
  16. //是否闰年
  17. int IsLeapYear(int year)
  18. {
  19. return ((year%4==0) && (year%100!=0)||year%400==0);
  20. }
  21. //得到date.month的最大天数
  22. int GetLastDay(tagDate date)
  23. {
  24. int num;
  25. switch(date.month)
  26. {
  27. case 1:
  28. case 3:
  29. case 5:
  30. case 7:
  31. case 8:
  32. case 10:
  33. case 12:
  34. num=31;
  35. break;
  36. case 2:
  37. num = 28+IsLeapYear(date.year);
  38. break;
  39. default:
  40. num = 30;
  41. }
  42. return num;
  43. }
  44. //日期是否合法
  45. int IsDateValid(tagDate date)
  46. {
  47. if(date.year <0 || date.month <1 || date.month> 12)
  48. return 0;
  49. if(date.day <1 || date.day> GetLastDay(date))
  50. return 0;
  51. return 1;
  52. }
  53. //date+1
  54. void AddDay(tagDate *date)
  55. {
  56. date->day++;
  57. if(date->day > GetLastDay(*date))
  58. {
  59. date->day = 1;
  60. date->month++;
  61. if(date->month > 12)
  62. {
  63. date->month = 1;
  64. date->year++;
  65. }
  66. }
  67. }
  68. //date1比date2小返回值为1,否则为0
  69. int Compare(tagDate date1, tagDate date2)
  70. {
  71. if(date1.year < date2.year)
  72. return 1;
  73. if(date1.year <= date2.year && date1.month < date2.month)
  74. return 1;
  75. if(date1.year <= date2.year && date1.month <= date2.month && date1.day < date2.day)
  76. return 1;
  77. return 0;
  78. }
  79. //计算两个日期的间隔天数
  80. long DateDiff(tagDate date1, tagDate date2)
  81. {
  82. long delta = 0;
  83. tagDate date3;
  84. //若date1 > date2,交换date1,date2
  85. if(!Compare(date1, date2))
  86. {
  87. date3 = date2;
  88. date2 = date1;
  89. date1 = date3;
  90. }
  91. //date1比date2少时,date1日期加1
  92. while(Compare(date1,date2))
  93. {
  94. AddDay(&date1);
  95. delta++;
  96. }
  97. return delta;
  98. }
  99. void main()
  100. {
  101. tagDate date1, date2;
  102. int y, m, d;
  103. system("cls");
  104. while(1)
  105. {
  106. puts("\nInput   date1\t ");
  107. scanf("%d,%d,%d", &y, &m, &d);
  108. SetDate(y, m, d, &date1);
  109. if(!IsDateValid(date1))
  110. {
  111. puts( "date1   is   invalid !");
  112. exit(1);
  113. }
  114. puts("\nInput   date2\t ");
  115. scanf("%d,%d,%d", &y, &m, &d);
  116. SetDate(y, m, d, &date2);
  117. if(!IsDateValid(date2))
  118. {
  119. puts( "date2   is   invalid !");
  120. exit(1);
  121. }
  122. //
  123. printf("\nResult : [%ld]", DateDiff(date1,date2));
  124. }
  125. }

https://blog.csdn.net/hellokandy/article/details/52194332

C++ 计算任意两个日期之间的天数的更多相关文章

  1. iOS 计算两个日期之间的天数问题

    //获取当前时间若干年.月.日之后的时间 + (NSDate *)dateWithFromDate:(NSDate *)date years:(NSInteger)years months:(NSIn ...

  2. JS计算两个日期之间的天数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

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

    MYSQL自带函数计算给定的两个日期的间隔天数   有两个途径可获得   1.利用TO_DAYS函数   select to_days(now()) - to_days('20120512')   2 ...

  4. JS计算两个日期之间的天数,时间差计算

    1.日期之间的天数计算 //计算天数差的函数,通用 function DateDiff(sDate1, sDate2) { //sDate1和sDate2是2017-9-25格式 var aDate, ...

  5. java计算两个日期之间的天数,排除节假日和周末

    如题所说,计算两个日期之前的天数,排除节假日和周末.这里天数的类型为double,因为该功能实现的是请假天数的计算,有请一上午假的为0.5天. 不够很坑的是每个日期都要查询数据库,感觉很浪费时间. 原 ...

  6. element ui 日期控件范围时间限制记录、以及计算两个日期之间的天数

    日期的筛选经常会有最小的日期选择,例如:当前日期 :clearable="false" :picker-options="pickerOptions0" val ...

  7. js 求两个日期之间相差天数

    //求两个日期之间的相差天数 function daysBetween(DateOne, DateTwo) { var OneMonth = DateOne.substring(5, DateOne. ...

  8. 计算两个日期之间的天数差C++/java

    1--Java 分析:调用java中Calendar类 int days(Date date1,Date date2){ Calendar cal = new Calendar.getInstance ...

  9. JavaScript实现计算两个日期之间的天数

    以“yyyy-MM-dd”格式为例,现在有两个日期,分别为“2006-01-01”,“2007-05-20”. 1.调用Date.parser()方法,将字符串格式的时间戳转换为Date类型时间对象: ...

随机推荐

  1. Node中的JavaScript和浏览器中的JavaScript的区别

    浏览器中的JavaScript: 1.基于ECMAscript规范,这个规范规定了语法 2.添加了dom:用来处理文档 document object model 3.添加了BOM:用于操作浏览器 w ...

  2. Vue的全选功能实现思路

    全选功能的实现主要分两步: 1. 点击全选框选中所有选择框. 2. 当所有选择框都被选中时,勾选全选框. 详细思路: 1. 点击全选框选中所有选择框: 给全选框绑定一个值,然后添加change时间,当 ...

  3. Loadrunner经典测试实例

    Loadrunner经典测试实例

  4. 如何优雅的写UI——(1)MFC六大核心机制-程序初始化

    很多做软件开发的人都有一种对事情刨根问底的精神,例如我们一直在用的MFC,很方便,不用学太多原理性的知识就可以做出各种窗口程序,但喜欢钻研的朋友肯定想知道,到底微软帮我们做了些什么,让我们在它的框架下 ...

  5. x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode()

    x264代码剖析(三):主函数main().解析函数parse()与编码函数encode() x264的入口函数为main().main()函数首先调用parse()解析输入的參数,然后调用encod ...

  6. nodeJS+socket.io传递消息

    服务器端 安装express,socket.io npm install express --save-dev npm install socket.io --save app.js const ex ...

  7. solr6.3+tomcat8报错HTTP Status 403 – Forbidden解决办法

    注释掉tomcat下solr项目web.xml中的如下这段代码即可:

  8. 水题ing

    T1: https://www.luogu.org/problemnew/show/P1724幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆 ...

  9. MyBatis学习总结(13)——Mybatis查询之resultMap和resultType区别

    MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性 ...

  10. Mycat 读写分离+分库分表

    上次进过GTID复制的学习记录,已经搭建好了主从复制的服务器,现在利用现有的主从复制环境,加上正在研究的Mycat,实现了主流分布式数据库的测试 Mycat就不用多介绍了,可以实现很多分布式数据库的功 ...