cal: Berechnung eines Kalenders

Ein Klassiker der UNIX-Welt ist das Hilfsprogramm cal. Es gibt einen Kalender in Textform auf die Konsole aus. Ich habe mich beim Nachbau an der BSD-Implementierung orientiert, die u. a. auch in den meisten Linux-Distributionen gefunden werden kann.

cal gibt Kalender für die Jahre 1 bis 9999 aus. Dabei muß also der Umstieg vom julianischen Kalender auf den gregorianischen Kalender berücksichtigt werden. Dieser Umstieg erfolgt nicht überall zur gleichen Zeit. Offiziell eingeführt wurde der gregorianische Kalender im Jahr 1582 durch Papst Gregor XIII. Viele Länder, darunter Frankreich, Spanien, und natürlich das Heilige Römische Reich, nahmen ihn gleich auf. Andere Länder ließen sich mehr Zeit. England und seine Kolonien übernahm den gregorianischen Kalender im Jahr 1752, Russland sogar erst 1918. Ein entscheidender Unterschied zwischen den Kalendern ist die Regel, nach der Schaltjahre bestimmt werden. Dadurch bedingt ist auch der Versatz zwischen beiden Kalendern. Als in England der gregorianische Kalender übernommen wurde, mußten 11 Tage übersprungen werden. Man entschied sich dazu, diese dem September zu entnehmen: auf den 2. September folgte der 14. September.

Eine Schwierigkeit bei der Berechnung eines Kalenders stellt die Bestimmung der Wochentage dar. Für den gregorianischen Kalender verwende ich die Wochentagsformel von Carl Friedrich Gauß. Diese nutzt eine Tabelle mit Werten für jeden Monat. Davon ausgehend wird der Wochentag des gewünschten Tags bestimmt, und die verschiebende Wirkung der Jahre und Schaltjahre berücksichtigt. Für den julianischen Kalender habe ich eine eigene Formel entwickelt, die so ähnlich arbeitet, aber eine an anderer Stelle im Programm bereits vorhandene Tabelle nutzt.

Downloads

Version Datum Änderungen Datei Beschreibung
2.1 2010-08-07 Umbau von C99 auf ANSI-C cal-2.1.win32.zip Binaries für Win32
cal-2.1.src.zip Quellcode
2.0 2010-05-01 Neuimplementierung cal-2.0.win32.zip Binaries für Win32
cal-2.0.src.zip Quellcode
1.1 2006-11-22 Korrektur der Schaltjahres-Erkennung cal-1.1.win32.zip Binaries für Win32
cal-1.1.src.zip Quellcode
1.0 2003-07-29 Erstes Release cal-1.0.win32.zip Binaries für Win32
cal-1.0.src.zip Quellcode