Guest User

Untitled

a guest
Dec 22nd, 2017
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.93 KB | None | 0 0
  1. #include <cmath>
  2. #include <iostream>
  3.  
  4. //https://stackoverflow.com/questions/9987562/determining-the-difference-between-dates
  5.  
  6.     struct Date
  7.     {
  8.      int d, m, y;
  9.     };
  10.    
  11.     int daysTill(int month)
  12.     {
  13.      int days=0;
  14.      
  15.      switch(month)
  16.      {
  17.       case 1: days=0; break;
  18.      
  19.       case 2: days=31; break;
  20.      
  21.       case 3: days=59; break;
  22.      
  23.       case 4: days=90; break;
  24.      
  25.       case 5: days=120; break;
  26.      
  27.       case 6: days=151; break;
  28.      
  29.       case 7: days=181; break;
  30.      
  31.       case 8: days=212; break;
  32.      
  33.       case 9: days=243; break;
  34.      
  35.       case 10:days=273; break;
  36.      
  37.       case 11:days=304; break;
  38.      
  39.       case 12:days=334; break;
  40.      }
  41.      
  42.      return days;
  43.     }
  44.    
  45.     int daysDiff(Date d1, Date d2)
  46.     {
  47.      int dd1=0;
  48.      int dd2=0;
  49.      int y=0;
  50.      int yref=0;
  51.      
  52.      yref=((d1.y<d2.y) ? d1.y : d2.y);
  53.      
  54.      for(y=yref;y<d1.y;y++)
  55.      if(__isleap(y))dd1++;
  56.      
  57.      if(__isleap(d1.y) && d1.m>2) dd1++;
  58.      
  59.      dd1+=((daysTill(d1.m) + d1.d)+((d1.y - yref) * 365));
  60.      
  61.      for(y=yref;y<d2.y;y++)
  62.      if(__isleap(y))dd2++;
  63.      
  64.      if(__isleap(y) && d2.m>2)dd2++;
  65.      
  66.      dd2+=((daysTill(d2.m) + d2.d)+((d2.y - yref) * 365));
  67.      
  68.      return abs(dd2-dd1);
  69.     }
  70.    
  71. int main()
  72. {
  73.  
  74.  Date d1, d2;
  75.  
  76.    printf(
  77.           "\n\tDigite duas datas no formato DD/MM/YYYY"
  78.           "\n\n\tDigite data1: "
  79.          );
  80.    
  81.    scanf("%d/%d/%d",&d1.d,&d1.m,&d1.y);
  82.    
  83.    printf(
  84.           "\n\tDigite data2: "
  85.          );
  86.    
  87.    scanf("%d/%d/%d",&d2.d,&d2.m,&d2.y);
  88.  
  89.  
  90.    int dias(daysDiff(d1,d2)); // diferença entre datas em dias contando anos bisextos
  91.    
  92.    int idade(dias/365); //idade em anos
  93.    
  94.    int qtd_dias((dias%365)%30);
  95.    
  96.    int qtd_meses((dias%365)/30); //Digite data1: 29/03/1987  Digite data1: 21/12/2017 equivalen a 30 anos 9 meses e 18 dias
  97.  
  98.    int meses_totais(dias/30);
  99.    
  100.    int qtd_semanas(dias/7); // qtd semanas total dos dias
  101.    
  102.    int horas(dias*24); // qtd horas total dos dias
  103.    
  104.    int minutos(horas*60); // qtd minutos total dos dias
  105.    
  106.    int segundos(minutos*60); // qtd segundos total dos dias    
  107.  
  108.    /*
  109.     * esta forma de calcular só deve ser usada se o
  110.     * usuario entrar com as horas de nascimento.
  111.    int segs(dias*86400);
  112.    int horas(segs/3600);
  113.    int minutos((segs-(horas*3600))/60);
  114.    int segundos((segs - (horas * 3600)) - (minutos * 60));
  115.     */
  116.    
  117.     printf(
  118.            "\n\t%d ano(s) %d mes(es) e %d dia(s) de vida"
  119.            "\n\t%d horas"
  120.            "\n\t%d minutos"
  121.            "\n\t%d segundos"
  122.            "\n\t%d mes(es)"
  123.            "\n\t%d dia(s)"
  124.            "\n\t%d semana(s)\n\n",
  125.            idade,
  126.            qtd_meses,
  127.            qtd_dias,
  128.            horas,
  129.            minutos,
  130.            segundos,
  131.            meses_totais,
  132.            dias,
  133.            qtd_semanas
  134.           );
  135.   return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment