Go Down

Topic: Doomsday - Calcolo del giorno della settimana (Read 1 time) previous topic - next topic

cyberhs

E' proprio vero che non si smette mai di imparare.

Ho recentemente affrontato il problema del calcolo del giorno della settimana e su Wikipedia ho trovato questo interessante algoritmo che utilizzavo (senza sapere cosa diavolo era) in ambiente BASIC.

Oltre al mero calcolo del giorno della settimana, può servire a calcolare le date di inizio e fine dell'ora legale oppure della Pasqua.

Invito gli interessati al leggere l'argomento su Wikipedia

Ettore Massimo Albani

Code: [Select]

byte WeekDay(byte GG, byte MM, int AAAA) {                         // 0=Dom, 1=Lun, 2=Mar, 3=Mer, 4=Gio, 5=Ven, 6=Sab

  int I;
  int Century = AAAA / 100 + 1;                                    // secolo (2012 = 21)
  int CenturyYear = AAAA % 100;                                    // anno del secolo (2012 = 12)
  int CenDooms = ((5 * Century + (Century - 1) / 4) % 7 + 4) % 7;  // doomsday del secolo (21° = 2 = Mar)
  int YearDooms = (CenturyYear + CenturyYear / 4) % 7 + CenDooms;  // doomsday dell'anno (2012 = 3 = Mer)

  switch(MM) {
  case 1:                                                          // Gennaio
    if (AAAA % 4 > 0) I = 3;                                       // solare
    else I = 4;                                                    // bisestile
    break;
  case 2:                                                          // Febbraio
    if (AAAA % 4 > 0) I = 7;                                       // solare
    else I = 1;                                                    // bisestile
    break;
  case 3:                                                          // Marzo
    I = 7;
    break;
  case 5:                                                          // Maggio
    I = 9;
    break;
  case 7:                                                          // Luglio
    I = 11;
    break;
  case 9:                                                          // Settembre
    I = 5;
    break;
  case 11:                                                         // Novembre
    I = 7;
    break;
  default:                                                         // mesi pari 
    I = MM;
  }
  I = GG - I + YearDooms;
  if (I < 0) I += 7;
  I = I % 7;
  return I;
}

PaoloP

Grazie della segnalazione.  :smiley-mr-green:
Usa funzione simile è integrata nella libreria SwRTC di Leo --> http://arduino.cc/forum/index.php?topic=73496.0
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Go Up