找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12019|回复: 0
收起左侧

c语言 查询任意两个日期之间相差的天数

[复制链接]
ID:85764 发表于 2015-7-15 23:08 | 显示全部楼层 |阅读模式
  1. #include <stdio.h>
  2. #include <math.h>
  3. int Year1 ;
  4. int Month1 ;
  5. int Day1 ;
  6. int Year2 ;
  7. int Month2 ;
  8. int Day2 ;
  9. int MonthDays[] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} ;

  10. char IsLeapYear(int Year)
  11. {
  12.     if((Year % 4 == 0 && Year % 100 != 0) || Year % 400 == 0)
  13.     {
  14.         return 1 ;
  15.     }
  16.     else
  17.     {
  18.         return 0 ;
  19.     }
  20. }
  21. int GetMidMonthDays(int m1 , int m2, int y)
  22. {
  23.     int i ;
  24.     int ds ;
  25.     ds = 0 ;
  26.     for(i = m1 + 1 ; i < m2 ; i++)
  27.     {
  28.         ds += MonthDays[i-1] ;
  29.         if(i == 2)
  30.         {
  31.             if(IsLeapYear(y))
  32.             {
  33.                 ds++ ;
  34.             }
  35.         }
  36.     }
  37.     return ds ;
  38. }
  39. int GetSameYearDays(int y1 , int m1 , int d1 , int y2 , int m2 , int d2)
  40. {
  41.     int Days ;
  42.     //如果月份相同
  43.     if(m1 == m2)
  44.     {
  45.         Days =abs(d2 - d1)  ;
  46.     }
  47.     else
  48.     {
  49.         //计算第一个月份的天数
  50.         Days = abs(MonthDays[m1 - 1] - d1) ;
  51.         if(m1 == 2)
  52.         {
  53.             if(IsLeapYear(y1))
  54.             {
  55.                 Days++ ;
  56.             }
  57.         }
  58.         if((m1 + 1) != m2)
  59.         {
  60.             //计算中间月份的天数
  61.             Days += GetMidMonthDays(m1 , m2, y1);
  62.         }
  63.         Days += d2 ;
  64.     }
  65. return Days;
  66. }
  67. int GetMidYearDays(int y1,int y2)
  68. {
  69. int days=0;
  70. int i=0;
  71. for (i=y1+1;i<y2;i++)
  72. {
  73.   if (IsLeapYear(i-1))
  74.   {
  75.    days+=366;
  76.   }
  77.   else
  78.    days+=365;
  79. }
  80. return days;
  81. }
  82. int GetDifferentYearDays(int y1 , int m1 , int d1 , int y2 , int m2 , int d2)
  83. {
  84. int days;
  85. if (y1==y2)
  86. {
  87.   days=GetSameYearDays( y1 ,m1 ,d1 , y2 , m2 ,d2);
  88. }
  89. else
  90. {
  91.   days=MonthDays[m1+1]-d1;
  92.   if((y1+1) != y2)
  93.   {
  94.    days+=GetMidYearDays(y1,y2);
  95.   }
  96.   days+=GetMidMonthDays(m1-1,13,y1);
  97.   if(m2==1)
  98.   {
  99.    days+=d2;
  100.   }
  101.   else
  102.   {
  103.    days+=GetMidMonthDays(1,m2,y2);
  104.    days+=d2;
  105.   }  
  106. }
  107. return days;
  108. }
  109. void main(void)
  110. {
  111.     int Days ;
  112.     for(; ;)
  113.     {
  114.         printf("请输入第一个日期(年 月 日):\n");
  115.         scanf("%d%d%d" , &Year1 , &Month1 , &Day1);
  116.         printf("请输入第二个日期(年 月 日):\n");
  117.         scanf("%d%d%d" , &Year2 , &Month2 , &Day2);
  118.         //假定第一个日期小于第二个日期
  119.         Days = GetDifferentYearDays(Year1 , Month1 , Day1 , Year2 , Month2 , Day2);
  120.         printf("两个日期相差的天数为:%d\n" , Days);
  121.     }
  122. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表