Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Calcolo_giorni
- {
- class Program
- {
- static int calcolo_giorni(DateTime inizio, DateTime fine)
- {
- //array dove salvo i giorni per ogni mese (essendo 0 based il primo è a 0)
- int []giorni_mese = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- int giorni = 0;
- //posso dividere in 2 casi, se sono nello stesso anno oppure no
- if (inizio.Year == fine.Year)
- {
- //se sono nello sesso mese devo restituire solo la differenza di giorni
- if (inizio.Month == fine.Month)
- giorni = fine.Day - inizio.Day;
- //altrimenti calcolo i giorni per arrivare a fine mese e i giorni dei mesi interi che comprendo
- else
- {
- giorni = giorni_mese[inizio.Month] - inizio.Day;
- for(int i = inizio.Month+1; i < fine.Month; i++)
- giorni += giorni_mese[i];
- giorni = fine.Day;
- }
- }
- //se non sono nello stesso anno
- else
- {
- //calcolo il numero di giorni per arrivare alla fine del mese
- giorni = giorni_mese[inizio.Month] - inizio.Day;
- //calcolo il numero di giorni per arrivare a fine anno (conto i mesi interi)
- for (int i = inizio.Month+1; i < 12; i++)
- giorni += giorni_mese[i];
- //conto gli anni che passano (aggiungo dopo gli anni bisestili)
- giorni += 365 * (fine.Year - inizio.Year - 1);
- //calcolo i restanti giorni per arrivare al mese finale e gli sommo il giorno del mese alla fine
- for (int i = 1; i < fine.Month; i++)
- giorni += giorni_mese[i];
- giorni += fine.Day;
- }
- //calcolo se l'anno di "partenza" è bisestile
- if (inizio.Month <= 3 && ((inizio.Month % 4 == 0) && (inizio.Month % 100 != 0)) || inizio.Month % 400 == 0)
- giorni++;
- //calcolo se l'anno di "arrivo" è bisestile
- if (fine.Month > 3 && ((fine.Month % 4 == 0) && (fine.Month % 100 != 0)) || fine.Month % 400 == 0)
- giorni++;
- //Giorni da recuperare degli anni bisestili
- for (int i=inizio.Year+1; i<fine.Year; i++)
- if(((i % 4 == 0) && (i % 100 != 0)) || i % 400 == 0)
- giorni++;
- return giorni;
- }
- static void Main(string[] args)
- {
- DateTime inizio = DateTime.Parse("18-06-1815");
- DateTime today = DateTime.Parse(Console.ReadLine());
- int diff = Convert.ToInt32((today - inizio).TotalDays);
- int calcolato = calcolo_giorni(inizio, today);
- Console.WriteLine(diff);
- Console.WriteLine(calcolato);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement