zoukankan      html  css  js  c++  java
  • C++练习 | 计算两日期之间天数差

      1 #include<iostream>
      2 #include<string>
      3 #include<cstring>
      4 using namespace std;
      5 
      6 class Date
      7 {
      8 private:
      9     int year;
     10     int month;
     11     int day;
     12 public:
     13     void get()
     14     {
     15         int a,b,c;
     16         cin>>a;
     17         getchar();
     18         cin>>b;
     19         getchar();
     20         cin>>c;
     21         year=a;
     22         month=b;
     23         day=c;
     24         return;
     25     }
     26     friend int days(Date a,Date b);
     27 };
     28 
     29 int days(Date a,Date b)
     30 {
     31     int day1=0;
     32     Date temp;
     33     if((a.year<b.year)||((a.year==b.year)&&(a.month<b.month))||((a.year==b.year)&&(a.month==b.month)&&(a.day<b.day)))
     34     {
     35         temp=a;
     36         a=b;
     37         b=temp;//保证a比b日期靠后
     38     }
     39     if(a.year!=b.year)
     40     {
     41         day1+=(a.year-b.year-1)*365;//不考虑闰年和不完整年的整年天数
     42         day1+=((((a.year-1)/4) - ((a.year-1)/100) + ((a.year-1)/400))-(((b.year-1)/4) - ((b.year-1)/100) + ((b.year-1)/400)));//期间闰年天数
     43     for(int i=b.month;i<=12;i++)
     44     {
     45         switch(i)
     46         {
     47             case 1:
     48             {
     49                 day1+=31;
     50                 break;
     51             }
     52             case 2:
     53             {
     54                 day1+=28;
     55                 break;
     56             }
     57             case 3:
     58             {
     59                 day1+=31;
     60                 break;
     61             }
     62             case 4:
     63             {
     64                 day1+=30;
     65                 break;
     66             }
     67             case 5:
     68             {
     69                 day1+=31;
     70                 break;
     71             }
     72             case 6:
     73             {
     74                 day1+=30;
     75                 break;
     76             }
     77             case 7:
     78             {
     79                 day1+=31;
     80                 break;
     81             }
     82             case 8:
     83             {
     84                 day1+=31;
     85                 break;
     86             }
     87             case 9:
     88             {
     89                 day1+=30;
     90                 break;
     91             }
     92             case 10:
     93             {
     94                 day1+=31;
     95                 break;
     96             }
     97             case 11:
     98             {
     99                 day1+=30;
    100                 break;
    101             }
    102             case 12:
    103             {
    104                 day1+=31;
    105                 break;
    106             }
    107         }
    108     }
    109     day1-=b.day;
    110     for(int i=a.month-1;i>=1;i--)
    111     {
    112         switch(i)
    113         {
    114             case 1:
    115             {
    116                 day1+=31;
    117                 break;
    118             }
    119             case 2:
    120             {
    121                 day1+=28;
    122                 break;
    123             }
    124             case 3:
    125             {
    126                 day1+=31;
    127                 break;
    128             }
    129             case 4:
    130             {
    131                 day1+=30;
    132                 break;
    133             }
    134             case 5:
    135             {
    136                 day1+=31;
    137                 break;
    138             }
    139             case 6:
    140             {
    141                 day1+=30;
    142                 break;
    143             }
    144             case 7:
    145             {
    146                 day1+=31;
    147                 break;
    148             }
    149             case 8:
    150             {
    151                 day1+=31;
    152                 break;
    153             }
    154             case 9:
    155             {
    156                 day1+=30;
    157                 break;
    158             }
    159             case 10:
    160             {
    161                 day1+=31;
    162                 break;
    163             }
    164             case 11:
    165             {
    166                 day1+=30;
    167                 break;
    168             }
    169             case 12:
    170             {
    171                 day1+=31;
    172                 break;
    173             }
    174         }
    175     }
    176     day1+=a.day;
    177     if(((b.year%4==0&&b.year%100!=0)||(b.year%400==0))&&(b.month>2))
    178         day1-=1;
    179     if(((a.year%4==0&&a.year%100!=0)||(a.year%400==0))&&(a.month>2))
    180         day1+=1;
    181     }
    182     else
    183     {
    184         for(int i=b.month;i<a.month;i++)
    185         {
    186             switch(i)
    187             {
    188                 case 1:
    189                 {
    190                     day1+=31;
    191                     break;
    192                 }
    193                 case 2:
    194                 {
    195                     day1+=28;
    196                     break;
    197                 }
    198                 case 3:
    199                 {
    200                     day1+=31;
    201                     break;
    202                 }
    203                 case 4:
    204                 {
    205                     day1+=30;
    206                     break;
    207                 }
    208                 case 5:
    209                 {
    210                     day1+=31;
    211                     break;
    212                 }
    213                 case 6:
    214                 {
    215                     day1+=30;
    216                     break;
    217                 }
    218                 case 7:
    219                 {
    220                     day1+=31;
    221                     break;
    222                 }
    223                 case 8:
    224                 {
    225                     day1+=31;
    226                     break;
    227                 }
    228                 case 9:
    229                 {
    230                     day1+=30;
    231                     break;
    232                 }
    233                 case 10:
    234                 {
    235                     day1+=31;
    236                     break;
    237                 }
    238                 case 11:
    239                 {
    240                     day1+=30;
    241                     break;
    242                 }
    243                 case 12:
    244                 {
    245                     day1+=31;
    246                     break;
    247                 }
    248             }
    249         }
    250         day1+=a.day;
    251         day1-=b.day;
    252         if(b.month==2&&b.day==29)
    253             day1++;
    254         if(((a.year%4==0&&a.year%100!=0)||(a.year%400==0))&&(b.month<=2&&b.day!=29&&a.month>2))
    255         {
    256             day1++;
    257         }
    258     }
    259     return day1;
    260 }
    261 
    262 int main()
    263 {
    264     Date y1,y2;
    265     y1.get();
    266     y2.get();
    267     cout<<days(y1,y2);
    268     return 0;
    269 }
  • 相关阅读:
    字符串处理(包括正则生成工具)
    php.ini 个别字段笔记
    php-5.4 升级到 php7.2
    【mysql笔记】针对 group_concat 长度限制
    七牛,前端上传图片
    PHP 替换 特殊空白符
    【代码块】定时任务<swoole> 100%无人值守
    安装nodejs
    linux安装beanstalkd
    个人笔记上传 -- redis安装
  • 原文地址:https://www.cnblogs.com/tsj816523/p/10608087.html
Copyright © 2011-2022 走看看