Montag, 6. Juli 2009, 01:06
gcal: Das Gregorianische Kalenderprogramm
gcal ist ein Programm für die Kommandozeile um Kalender zu berechnen. Solche Programme gibt es sicher etliche, gcal kennt darüber hinaus aber Feiertage von diversen Ländern, Bundesländern und Religionsgemeinschaften und kann zahlreiche astronomische Daten berechnen.
Wird gcal ohne Parameter aufgerufen, zeigt es den Kalender vom Aktuellen Monat an:
$ gcal

März 2009

Montag           2  9 16 23 30
Dienstag         3 10 17 24 31
Mittwoch         4 11 18 25   
Donnerstag       5 12 19 26   
Freitag          6 13 20 27   
Samstag          7 14 21 28   
Sonntag       1  8 15 22 29   
Wer einen anderen Monat anzeigen möchte, kann den Monat des akutellen Jahres angeben (gcal 11), Jahr und Monat (gcal 11 2010) oder auch ein ganzes Jahr anzeigen lassen (gcal 2009). So weit alles recht unspektakulär.

Feiertage
Mit --holiday-list lässt sich die ewige Feiertagsliste anzeigen. --holiday-list=short zeigt nur gesetzliche Feiertage an. Ohne weitere Parameter ist diese Liste zunächst einmal leer. Die Liste lässt sich mit diversen Feiertagen befüllen. Zum Beispiel gibt es --christian-holidays, --islamic-civil-holidays oder --persian-jalaali-holidays.
Dies sind Feiertage, die auf der ganzen Welt gleich sind. Es sind aber auch länderspezifische Feiertagslisten verfügbar. Oft gibt es Feiertagslisten nicht nur für einen Nationalstaat, sondern für unterschiedliche Gebiete in dem Staat. In den USA zum Beispiel für alle Bundesstaaten und in Deutschland für die einzelnen Bundesländer. Die Liste der Länder und der entsprechenden Codes für die Kommandozeile ist in der Dokumentation enthalten. Die Liste geht von Andorra bis Zimbabwe, insgesamt 226 Länder und Gebiete.
Interessieren mich die Feiertage der Vereinigten Arabischen Emirate, mache ich folgendes:
$ gcal --holiday-list --cc-holidays=AE

Ewige Feiertagsliste:                 Das Jahr 2009 ist KEIN Schaltjahr

Neujahr (AE)                             + Do,   1 Jan 2009 =  -86 Tage
Eid-i-Milad-un-Nabi (AE)                 + Mo,   9 Mär 2009 =  -19 Tage
Shab-e-Mi'raj (AE)                       + Mo,  20 Jul 2009 = +114 Tage
Scheich Zayeds Himmelfahrt (AE)          + Do,   6 Aug 2009 = +131 Tage
Ramadan (AE)                             - Sa,  22 Aug 2009 = +147 Tage
Eid-al-Fitr (AE)                         + Mo,  21 Sep 2009 = +177 Tage
Eid-al-Fitr (AE)                         + Di,  22 Sep 2009 = +178 Tage
Eid-al-Fitr (AE)                         + Mi,  23 Sep 2009 = +179 Tage
Eid-al-Adha (AE)                         + Sa,  28 Nov 2009 = +245 Tage
Eid-al-Adha (AE)                         + So,  29 Nov 2009 = +246 Tage
Eid-al-Adha (AE)                         + Mo,  30 Nov 2009 = +247 Tage
Nationalfeiertag (AE)                    + Mi,   2 Dez 2009 = +249 Tage
Islamisches Neujahr 1431 (AE)            + Fr,  18 Dez 2009 = +265 Tage
Für Deutschland gibt es Bundesland-spezifische Feiertage.Statt --cc-holidays=AE benutze ich für Berlin zum Beispiel --cc-holidays=DE_BL. Alle verfügbaren Ländercodes sind wie gesagt in der Dokumentation aufgelistet.

Astronomische Ereignisse
Die Feiertagsliste kann mit Terminen von grundsätzlichen astronomischen Ereignissen angereichert werden. Das sind Sonnen- und Mondfinsternisse, Sonnenwende, Tag- und Nachtgleiche und die Daten von Voll-, Halb- und Neumond. Möchte ich nur die Feiertagsliste (ohne Kalender) vom Januar 2010 haben, sieht der Aufruf wie folgt aus:
$ gcal --suppress-calendar --holiday-list --astronomical-holidays 1 2010

Ewige Feiertagsliste:

Abnehmender Halbmond 10:39 (Ast)         - Do,   7 Jan 2010
Neumond 07:11 (Ast)                      - Fr,  15 Jan 2010
Sonnenfinsternis/Ring 07:06 (Ast)        - Fr,  15 Jan 2010
Zunehmender Halbmond 10:53 (Ast)         - Sa,  23 Jan 2010
Vollmond 06:17 (Ast)                     - Sa,  30 Jan 2010
Alle Daten die --astronomical-holidays liefert sind überall auf der Erde gültig. Es brauchen also keine Längen/Breitengerade angegeben werden. In der Ausgabe lässt sich jedoch sehen, dass die Termine Minutengenau sind. Und da stößt man natürlich wieder auf zwei Probleme: Zeitzonen und Sommerzeit.

Zeitzone
todo

Special Texts
Mit den Special Texts lässt sich eine Liste mit festen Terminen pflegen. Die Special Texts werden in ~/.gcalrc eingetragen und mit der Option -c abgerufen. Als feste Termine lassen sich auch wiederkehrende Termine eintragen. Wird in der .gcalrc folgedes eingetragen:
20090705 80. Geburtstag von Mutti
liefert gcal am 5. Juli 2009 aufgerufen:
$ gcal -c

Terminliste:

So,   5 Jul 2009: 80. Geburtstag von Mutti
Soll der Termin für jedes Jahr gelten, so muss das Jahr auf 0000 gesetzt werden. Normalerweise zeigt gcal immer die Termine für das aktuelle Datum an. Wenn nicht das aktuelle Datum benutzt werden soll sieht der Aufruf so aus:
$ clear; gcal -c  %20090705
Es lassen sich auch Termine eintragen die jeden Tag erscheinen:
0*d1#999 Katze füttern nicht vergessen





Dokumentation
Die Dokumentation liegt als GNU Info vor. Im Web ist sie z.b. hier zu finden: http://sunsite.ualberta.ca/Documentation/Gnu/gcal-3.00/html_node/gcal.html

Kommentieren