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

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy