Advertisement
FiloSanza

Calcolo giorni

Oct 18th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.04 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Calcolo_giorni
  8. {
  9.     class Program
  10.     {
  11.         static int calcolo_giorni(DateTime inizio, DateTime fine)
  12.         {
  13.             //array dove salvo i giorni per ogni mese (essendo 0 based il primo è a 0)
  14.             int []giorni_mese = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  15.             int giorni = 0;
  16.             //posso dividere in 2 casi, se sono nello stesso anno oppure no
  17.             if (inizio.Year == fine.Year)
  18.             {
  19.                 //se sono nello sesso mese devo restituire solo la differenza di giorni
  20.                 if (inizio.Month == fine.Month)
  21.                     giorni = fine.Day - inizio.Day;
  22.                 //altrimenti calcolo i giorni per arrivare a fine mese e i giorni dei mesi interi che comprendo
  23.                 else
  24.                 {
  25.                     giorni = giorni_mese[inizio.Month] - inizio.Day;
  26.                     for(int i = inizio.Month+1; i < fine.Month; i++)
  27.                         giorni += giorni_mese[i];
  28.                     giorni = fine.Day;
  29.                 }
  30.             }
  31.             //se non sono nello stesso anno
  32.             else
  33.             {
  34.                 //calcolo il numero di giorni per arrivare alla fine del mese
  35.                 giorni = giorni_mese[inizio.Month] - inizio.Day;
  36.                 //calcolo il numero di giorni per arrivare a fine anno (conto i mesi interi)
  37.                 for (int i = inizio.Month+1; i < 12; i++)
  38.                     giorni += giorni_mese[i];
  39.                 //conto gli anni che passano (aggiungo dopo gli anni bisestili)
  40.                 giorni += 365 * (fine.Year - inizio.Year - 1);
  41.                 //calcolo i restanti giorni per arrivare al mese finale e gli sommo il giorno del mese alla fine
  42.                 for (int i = 1; i < fine.Month; i++)
  43.                     giorni += giorni_mese[i];
  44.                 giorni += fine.Day;
  45.             }
  46.  
  47.             //calcolo se l'anno di "partenza" è bisestile
  48.             if (inizio.Month <= 3 && ((inizio.Month % 4 == 0) && (inizio.Month % 100 != 0)) || inizio.Month % 400 == 0)
  49.                 giorni++;
  50.             //calcolo se l'anno di "arrivo" è bisestile
  51.             if (fine.Month > 3 && ((fine.Month % 4 == 0) && (fine.Month % 100 != 0)) || fine.Month % 400 == 0)
  52.                 giorni++;
  53.             //Giorni da recuperare degli anni bisestili
  54.             for (int i=inizio.Year+1; i<fine.Year; i++)
  55.                 if(((i % 4 == 0) && (i % 100 != 0)) || i % 400 == 0)
  56.                     giorni++;
  57.  
  58.             return giorni;
  59.         }
  60.         static void Main(string[] args)
  61.         {
  62.             DateTime inizio = DateTime.Parse("18-06-1815");
  63.             DateTime today = DateTime.Parse(Console.ReadLine());
  64.  
  65.             int diff = Convert.ToInt32((today - inizio).TotalDays);
  66.             int calcolato = calcolo_giorni(inizio, today);
  67.             Console.WriteLine(diff);
  68.             Console.WriteLine(calcolato);
  69.         }
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement