Berechnung des Wochentags
Letztens bin ich durch mein Studium über ein interessantes Thema gestoßen. Wie berechnet man eigentlich den Wochentag?
Ohne hier groß ins Detail zu gehen verlinke ich hier zu dem passenden Wikiedia Eintrag und darin befindet sich eine Berechnung, für die ich eine Funktion in C/C++ programmiert habe. Ich verwende den Typen uint8_t, da diese Funktion bei einem Mikrocontroller zum Einsatz kommt.
uint8_t calculateWeekday( uint8_t day, uint8_t month, uint8_t century, uint8_t year ) {
const uint8_t monthFactor = ( ( month+9 ) % 12 ) + 1;
const uint8_t yearFactor = ( month > 2 ? year
: ( ( year + 100 -1 ) % 100 ) );
const uint8_t centuryFactor = month > 2 ? century
: year == 0 ? century - 1
: century;
//in zwei Berechnungen aufgeteilt,
//da die Zahl negativ werden könnte und
//das wird mit der while-Schleife korrigiert
uint8_t tmp1 = day + ( 2.6 * monthFactor - 0.2 ) + yearFactor +
( yearFactor/4 ) + ( centuryFactor/4 );
uint8_t tmp2 = 2 * centuryFactor;
while ( tmp1 < tmp2 ) {
tmp1+=7;
}
return (tmp1 - tmp2) % 7;
}
Man sollte beachten, dass der Typ uint8_t einen Wertebereich von 0 bis 255 hat und es in bestimmten Fällen zu einem nicht korrekten Verhalten kommt. Deshalb empfiehlt es sich einen Typen mit größerem Wertebereich zu benutzen oder Fehler abzufangen.