Pages: [1]   Go Down
Author Topic: Doomsday - Calcolo del giorno della settimana  (Read 1047 times)
0 Members and 1 Guest are viewing this topic.
Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 37
Posts: 1281
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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;
}
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 110
Posts: 6974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie della segnalazione.  smiley-mr-green
Usa funzione simile è integrata nella libreria SwRTC di Leo --> http://arduino.cc/forum/index.php?topic=73496.0
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1]   Go Up
Jump to: