Loading...
Pages: [1]   Go Down
Author Topic: Doomsday - Calcolo del giorno della settimana  (Read 409 times)
0 Members and 1 Guest are viewing this topic.
Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 17
Posts: 521
"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
Offline Offline
Faraday Member
**
Karma: 49
Posts: 3000
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

IDE 1.0.4 - Arduino UNO R3 - Ethernet Shield R3 - DCF77 Module - Adafruit Data Loggin Shield - LCD 16x2 RGB positive backlight - i2c LCD backpack - RTC 1307 Board - Saleae Compatibile Logic Analyzer 8ch 24Mhz - ATtiny2313 ProtoBoard - Xino Board - ATtiny 4313 - Arduino 2009 - Arduino USB Serial Ligth - DS18B20 - LM35DZ - ShiftRegister - TL431 - ATtiny 85
Ultimi acquisti:
CodeBender: http://codebender.cc/register/?referrer=PaoloP

Pages: [1]   Go Up
Print
 
Jump to: