Advertisement
fcamuso

Untitled

Jul 23rd, 2020
505
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.29 KB | None | 0 0
  1. using System;
  2.  
  3. namespace test
  4. {
  5.   class Program
  6.   {
  7.     static bool Bisestile(int anno)
  8.     {
  9.       return anno % 400 == 0 || (anno % 4 == 0 && anno % 100 != 0);
  10.     }
  11.  
  12.     static int GiorniAnno(int anno)
  13.     { return 365 + (Bisestile(anno) ? 1 : 0); }
  14.  
  15.     static int GiorniMese(int mese, int anno) //parametri formali
  16.     {
  17.       switch (mese)
  18.       {
  19.         case 4:
  20.         case 6:
  21.         case 9:
  22.         case 11:
  23.           return 30;
  24.  
  25.         case 2:
  26.           return 28 + (anno % 400 == 0 || (anno % 4 == 0 && anno % 100 != 0) ? 1 : 0);
  27.  
  28.         default:
  29.           return 31;
  30.       }
  31.     }
  32.  
  33.     static bool DataCorretta(int g, int m, int a)
  34.     {
  35.       return a > 0 && m > 0 && m < 13 && g > 0 && g <= GiorniMese(m, a);
  36.     }
  37.  
  38.     static int DifferenzaDateInGiorni(int g1, int m1, int a1, int g2, int m2, int a2)
  39.     {
  40.       if (m1 == m2 && a1 == a2) return Math.Abs(g2 - g1);
  41.  
  42.       //se non in ordine cronologico, inverti le date
  43.       if (a1 > a2 || (a1 == a2 && m1 > m2))
  44.       {
  45.         Scambia(ref g1, ref g2); Scambia(ref m1, ref m2); Scambia(ref a1, ref a2);
  46.       }
  47.  
  48.       int differenza = GiorniMese(m1, a1) - g1; //a fine mese
  49.  
  50.       //sommo i giorni dei mesi intermedi
  51.       if (a1 == a2)
  52.         for (int mese = m1 + 1; mese < m2; mese++) differenza += GiorniMese(mese, a1);
  53.       else
  54.       {
  55.  
  56.         //mesi anno di partenza fino a fine anno
  57.         for (int mese = m1 + 1; mese <= 12; mese++) differenza += GiorniMese(mese, a1);
  58.  
  59.         //anni intermedi
  60.         for (int anno = a1 + 1; anno < a2; anno++) differenza += GiorniAnno(anno);
  61.  
  62.         //mesi anno finale escluso ultimo
  63.         for (int mese = 1; mese < m2; mese++) differenza += GiorniMese(mese, a2);
  64.       }
  65.  
  66.       //sommo i giorni restanti
  67.       return differenza + g2;
  68.     }
  69.  
  70.     static void Scambia(ref int a, ref int b)
  71.     {
  72.       int temp = a; a = b; b = temp;
  73.     }
  74.  
  75.     static public int DifferenzaGiorni2(int g1, int m1, int a1, int g2, int m2, int a2)
  76.     {
  77.       int[] DaysToMonth366 = new int[] { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 };
  78.       int[] DaysToMonth365 = new int[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
  79.       int[] days;
  80.       int y, n1, n2;
  81.  
  82.       days = Bisestile(a1) ? DaysToMonth366 : DaysToMonth365; //nb: si assegnano riferimenti ad array
  83.  
  84.       y = a1 - 1;
  85.       n1 = y * 365 + y / 4 - y / 100 + y / 400 + days[m1 - 1] + g1 - 1;
  86.      
  87.       days = Bisestile(a2) ? DaysToMonth366 : DaysToMonth365;
  88.      
  89.       y = a2 - 1;
  90.       n2 = y * 365 + y / 4 - y / 100 + y / 400 + days[m2 - 1] + g2 - 1;
  91.  
  92.       return Math.Abs(n2 - n1);
  93.     }
  94.  
  95.     static void Main(string[] args)
  96.     {
  97.       int[] data1 = new int[3];
  98.       int[] data2 = new int[3];
  99.  
  100.       DateTime d3 = new DateTime(2000, 1, 1);
  101.       data1 = new int[] { 1, 1, 2000 };
  102.  
  103.       for (int cicli = 0; cicli < 10000; cicli++)
  104.       {
  105.         DateTime d4 = d3.AddDays(1);
  106.         for (int i = 0; i < 10000; i++)
  107.         {
  108.           data2[0] = d4.Day; data2[1] = d4.Month; data2[2] = d4.Year;
  109.           //DifferenzaDateInGiorni(data1[0], data1[1], data1[2], data2[0], data2[1], data2[2]);
  110.           DifferenzaGiorni2(data1[0], data1[1], data1[2], data2[0], data2[1], data2[2]);
  111.           d4 = d4.AddDays(1);
  112.         }
  113.       }
  114.     }
  115.   }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement