Skip to content

Kalender als Text, HTML, Liste in Python auslesen

Python

In Python können Sie Kalender mit dem Kalendermodul in der Standardbibliothek als einfachen Text, HTML oder als Liste abrufen und ausgeben.

Dieser Artikel beschreibt die folgenden Inhalte.

  • Kalender als Klartext abrufen/ausgeben
    • Monatskalender
    • Jahreskalender
    • Stellen Sie den ersten Tag der Woche ein
    • Ändern Sie Gebietsschema und Namen von Wochentagen
  • Kalender als HTML-Tabelle abrufen/ausgeben
    • Monatskalender
    • Jahreskalender
    • CSS-Klassen festlegen
    • Stellen Sie den ersten Tag der Woche ein
    • Ändern Sie Gebietsschema und Namen von Wochentagen
  • Holen Sie sich Kalender als Liste
    • Liste der Nummern
    • Liste der Tupel
    • Liste von datetime.date
  • Auf der Kommandozeile

Auch für Schaltjahre bietet das Kalendermodul nützliche Funktionen.

Kalender als Klartext abrufen/ausgeben

Monatskalender

Sie können den Kalender jedes Jahres und Monats als String (str) mit Calendar.Monat() erhalten.

import calendar

print(calendar.month(2019, 1))
#     January 2019
# Mo Tu We Th Fr Sa Su
#     1  2  3  4  5  6
#  7  8  9 10 11 12 13
# 14 15 16 17 18 19 20
# 21 22 23 24 25 26 27
# 28 29 30 31
# 

print(type(calendar.month(2019, 1)))
# <class 'str'>

Die Spaltenbreite kann mit dem w-Parameter und die Zeilenbreite mit dem l-Parameter angegeben werden.

print(calendar.month(2019, 1, w=3, l=2))
#         January 2019
# 
# Mon Tue Wed Thu Fri Sat Sun
# 
#       1   2   3   4   5   6
# 
#   7   8   9  10  11  12  13
# 
#  14  15  16  17  18  19  20
# 
#  21  22  23  24  25  26  27
# 
#  28  29  30  31
# 
# 

Derselbe String kann mit Calendar.prmonth() ausgegeben werden.

calendar.prmonth(2019, 1)
#     January 2019
# Mo Tu We Th Fr Sa Su
#     1  2  3  4  5  6
#  7  8  9 10 11 12 13
# 14 15 16 17 18 19 20
# 21 22 23 24 25 26 27
# 28 29 30 31

Jahreskalender

Calendar.calendar() gibt den Jahreskalender zurück.

print(calendar.calendar(2019))
#                                   2019
# 
#       January                   February                   March
# Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
#     1  2  3  4  5  6                   1  2  3                   1  2  3
#  7  8  9 10 11 12 13       4  5  6  7  8  9 10       4  5  6  7  8  9 10
# 14 15 16 17 18 19 20      11 12 13 14 15 16 17      11 12 13 14 15 16 17
# 21 22 23 24 25 26 27      18 19 20 21 22 23 24      18 19 20 21 22 23 24
# 28 29 30 31               25 26 27 28               25 26 27 28 29 30 31
# 
#        April                      May                       June
# Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
#  1  2  3  4  5  6  7             1  2  3  4  5                      1  2
#  8  9 10 11 12 13 14       6  7  8  9 10 11 12       3  4  5  6  7  8  9
# 15 16 17 18 19 20 21      13 14 15 16 17 18 19      10 11 12 13 14 15 16
# 22 23 24 25 26 27 28      20 21 22 23 24 25 26      17 18 19 20 21 22 23
# 29 30                     27 28 29 30 31            24 25 26 27 28 29 30
# 
#         July                     August                  September
# Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
#  1  2  3  4  5  6  7                1  2  3  4                         1
#  8  9 10 11 12 13 14       5  6  7  8  9 10 11       2  3  4  5  6  7  8
# 15 16 17 18 19 20 21      12 13 14 15 16 17 18       9 10 11 12 13 14 15
# 22 23 24 25 26 27 28      19 20 21 22 23 24 25      16 17 18 19 20 21 22
# 29 30 31                  26 27 28 29 30 31         23 24 25 26 27 28 29
#                                                     30
# 
#       October                   November                  December
# Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
#     1  2  3  4  5  6                   1  2  3                         1
#  7  8  9 10 11 12 13       4  5  6  7  8  9 10       2  3  4  5  6  7  8
# 14 15 16 17 18 19 20      11 12 13 14 15 16 17       9 10 11 12 13 14 15
# 21 22 23 24 25 26 27      18 19 20 21 22 23 24      16 17 18 19 20 21 22
# 28 29 30 31               25 26 27 28 29 30         23 24 25 26 27 28 29
#                                                     30 31
# 

print(type(calendar.calendar(2019)))
# <class 'str'>

Mit dem Parameter m können Sie die Anzahl der pro Zeile auszugebenden Monate angeben. Voreingestellt sind drei Monate pro Zeile (= drei Spalten). Außerdem können Sie mit dem Parameter c die Anzahl der Leerzeichen zwischen den Monaten angeben.

Obwohl im folgenden Beispiel weggelassen, können Sie die Breite von Zeilen und Spalten innerhalb jedes Monats mit w- und l-Parametern wie Calendar.month() angeben.

print(calendar.calendar(2019, c=3, m=4))
#                                            2019
# 
#       January                February                March                  April
# Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su
#     1  2  3  4  5  6                1  2  3                1  2  3    1  2  3  4  5  6  7
#  7  8  9 10 11 12 13    4  5  6  7  8  9 10    4  5  6  7  8  9 10    8  9 10 11 12 13 14
# 14 15 16 17 18 19 20   11 12 13 14 15 16 17   11 12 13 14 15 16 17   15 16 17 18 19 20 21
# 21 22 23 24 25 26 27   18 19 20 21 22 23 24   18 19 20 21 22 23 24   22 23 24 25 26 27 28
# 28 29 30 31            25 26 27 28            25 26 27 28 29 30 31   29 30
# 
#         May                    June                   July                  August
# Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su
#        1  2  3  4  5                   1  2    1  2  3  4  5  6  7             1  2  3  4
#  6  7  8  9 10 11 12    3  4  5  6  7  8  9    8  9 10 11 12 13 14    5  6  7  8  9 10 11
# 13 14 15 16 17 18 19   10 11 12 13 14 15 16   15 16 17 18 19 20 21   12 13 14 15 16 17 18
# 20 21 22 23 24 25 26   17 18 19 20 21 22 23   22 23 24 25 26 27 28   19 20 21 22 23 24 25
# 27 28 29 30 31         24 25 26 27 28 29 30   29 30 31               26 27 28 29 30 31
# 
#      September               October                November               December
# Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su   Mo Tu We Th Fr Sa Su
#                    1       1  2  3  4  5  6                1  2  3                      1
#  2  3  4  5  6  7  8    7  8  9 10 11 12 13    4  5  6  7  8  9 10    2  3  4  5  6  7  8
#  9 10 11 12 13 14 15   14 15 16 17 18 19 20   11 12 13 14 15 16 17    9 10 11 12 13 14 15
# 16 17 18 19 20 21 22   21 22 23 24 25 26 27   18 19 20 21 22 23 24   16 17 18 19 20 21 22
# 23 24 25 26 27 28 29   28 29 30 31            25 26 27 28 29 30      23 24 25 26 27 28 29
# 30                                                                   30 31
# 

Derselbe String kann mit Calendar.prcal() ausgegeben werden. Die Ausgabe entfällt hier.

Stellen Sie den ersten Tag der Woche ein

Wie in den vorherigen Beispielen haben Kalender standardmäßig den Montag als ersten Tag der Woche.

Sie können den ersten Tag der Woche mit Calendar.setfirstweekday() festlegen.

calendar.setfirstweekday(calendar.SUNDAY)

print(calendar.month(2019, 1))
#     January 2019
# Su Mo Tu We Th Fr Sa
#        1  2  3  4  5
#  6  7  8  9 10 11 12
# 13 14 15 16 17 18 19
# 20 21 22 23 24 25 26
# 27 28 29 30 31
# 

kalender.MONTAG und kalender.SONNTAG sind Aliase, wobei MONTAG 0 und SONNTAG 6 ist. Sie können einen ganzzahligen Wert für kalender.setfirstweekday() angeben.

Sie können die aktuellen Einstellungen mit Calendar.firstweekday() überprüfen.

print(calendar.MONDAY)
# 0

print(calendar.SUNDAY)
# 6

calendar.setfirstweekday(0)

print(calendar.month(2019, 1))
#     January 2019
# Mo Tu We Th Fr Sa Su
#     1  2  3  4  5  6
#  7  8  9 10 11 12 13
# 14 15 16 17 18 19 20
# 21 22 23 24 25 26 27
# 28 29 30 31
# 

print(calendar.firstweekday())
# 0

Ändern Sie Gebietsschema und Namen von Wochentagen

Wochentagsnamen hängen vom Gebietsschema ab.

Indem Sie ein Objekt „calendar.LocaleTextCalendar“ mit dem Gebietsschema erstellen und seine verschiedenen Methoden aufrufen, können Sie Kalender mit Wochentagsnamen ausgeben, die diesem Gebietsschema entsprechen. Im Beispiel unten ist es auf Deutsch eingestellt.

ltc_de = calendar.LocaleTextCalendar(locale='de_de')

print(ltc_de.formatmonth(2019, 1))
#     Januar 2019
# Mo Di Mi Do Fr Sa So
#     1  2  3  4  5  6
#  7  8  9 10 11 12 13
# 14 15 16 17 18 19 20
# 21 22 23 24 25 26 27
# 28 29 30 31
# 

Calendar.LocaleTextCalendar verfügt über die folgenden Methoden. Die Parameter w und l können für einen Monatskalender und die zusätzlichen Parameter c und m für einen Jahreskalender angegeben werden.

  • formatmonth(): Gibt eine monatliche Kalenderzeichenfolge zurück
  • prmonth(): Druckt einen Monatskalender
  • formatyear(): Gibt eine jährliche Kalenderzeichenfolge zurück
  • pryear(): Druckt einen Jahreskalender

Beachten Sie, dass die Breite von Double-Byte-Zeichen nicht berücksichtigt wird.

ltc_ja = calendar.LocaleTextCalendar(locale='ja_jp')

print(ltc_ja.formatmonth(2019, 1))
#       1月 2019
# 月  火  水  木  金  土  日
#     1  2  3  4  5  6
#  7  8  9 10 11 12 13
# 14 15 16 17 18 19 20
# 21 22 23 24 25 26 27
# 28 29 30 31
# 

Kalender als HTML-Tabelle abrufen/ausgeben

Sie können den Kalender als HTML-Tabelle erhalten, indem Sie ein Objekt „calendar.HTMLCalendar“ erstellen und die verschiedenen Methoden aufrufen.

hc = calendar.HTMLCalendar()

Monatskalender

Verwenden Sie formatmonth() für einen Monatskalender. Mit dem Parameter withyear können Sie festlegen, ob das Jahr in der Kopfzeile angezeigt werden soll (Standard:True).

print(hc.formatmonth(2019, 1, withyear=False))
# <table border="0" cellpadding="0" cellspacing="0" class="month">
# <tr><th colspan="7" class="month">January</th></tr>
# <tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
# <tr><td class="noday">&nbsp;</td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td><td class="sun">6</td></tr>
# <tr><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td><td class="sun">13</td></tr>
# <tr><td class="mon">14</td><td class="tue">15</td><td class="wed">16</td><td class="thu">17</td><td class="fri">18</td><td class="sat">19</td><td class="sun">20</td></tr>
# <tr><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td><td class="sun">27</td></tr>
# <tr><td class="mon">28</td><td class="tue">29</td><td class="wed">30</td><td class="thu">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
# </table>
# 

print(type(hc.formatmonth(2019, 1)))
# <class 'str'>

Jahreskalender

Verwenden Sie formatyear() für einen Jahreskalender. Sie können die Anzahl der anzuzeigenden Monate pro Zeile mit dem Breitenparameter angeben (Standard:3).

Die Ausgabe entfällt hier.

print(hc.formatyear(2019, width=4))

CSS-Klassen festlegen

Wie in den vorherigen Beispielen zu sehen, werden CSS-Klassen für jeden Wochentag festgelegt.

Die Klassennamen werden als Liste im cssclasses-Attribut gespeichert. Sie können Klassennamen ändern, indem Sie eine neue Liste zuweisen. Wenn Sie formatmonth() oder formatyear() nach der Änderung aufrufen, können Sie HTML mit neuen Klassennamen erhalten.

print(hc.cssclasses)
# ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']

hc.cssclasses = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat blue', 'sun red']

Seit Python 3.7 wurden auch CSS-Klassenattribute für Monate, Jahre und nicht vorhandene Tage hinzugefügt. Diese können auch auf neue Werte geändert werden.

print(hc.cssclass_month)
# month

print(hc.cssclass_year)
# year

print(hc.cssclass_noday)
# noday

Stellen Sie den ersten Tag der Woche ein

Sie können den ersten Tag der Woche mit dem firstweekday-Parameter von Calendar.HTMLCalendar() angeben.

hc_sun = calendar.HTMLCalendar(firstweekday=6)

print(hc_sun.formatmonth(2019, 1))
# <table border="0" cellpadding="0" cellspacing="0" class="month">
# <tr><th colspan="7" class="month">January 2019</th></tr>
# <tr><th class="sun">Sun</th><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th></tr>
# <tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td></tr>
# <tr><td class="sun">6</td><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td></tr>
# <tr><td class="sun">13</td><td class="mon">14</td><td class="tue">15</td><td class="wed">16</td><td class="thu">17</td><td class="fri">18</td><td class="sat">19</td></tr>
# <tr><td class="sun">20</td><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td></tr>
# <tr><td class="sun">27</td><td class="mon">28</td><td class="tue">29</td><td class="wed">30</td><td class="thu">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
# </table>
# 

Beachten Sie, dass „calendar.setfirstweekday()“ nicht funktioniert.

Ändern Sie Gebietsschema und Namen von Wochentagen

Wenn Sie das Gebietsschema ändern möchten, erstellen Sie ein Objekt „calendar.LocaleHTMLCalendar“. Dieselben Methoden werden für das oben beschriebene Objekt „calendar.HTMLCalendar“ bereitgestellt.

lhc = calendar.LocaleHTMLCalendar(firstweekday=6, locale='ja_jp')

print(lhc.formatmonth(2019, 1))
# <table border="0" cellpadding="0" cellspacing="0" class="month">
# <tr><th colspan="7" class="month">1月 2019</th></tr>
# <tr><th class="sun">日</th><th class="mon">月</th><th class="tue">火</th><th class="wed">水</th><th class="thu">木</th><th class="fri">金</th><th class="sat">土</th></tr>
# <tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td></tr>
# <tr><td class="sun">6</td><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td></tr>
# <tr><td class="sun">13</td><td class="mon">14</td><td class="tue">15</td><td class="wed">16</td><td class="thu">17</td><td class="fri">18</td><td class="sat">19</td></tr>
# <tr><td class="sun">20</td><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td></tr>
# <tr><td class="sun">27</td><td class="mon">28</td><td class="tue">29</td><td class="wed">30</td><td class="thu">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
# </table>
# 

Holen Sie sich Kalender als Liste

Liste der Nummern

Sie können einen Kalender als zweidimensionale Liste (eine Liste von Listen) erhalten, deren Elemente ganze Zahlen von Datumsangaben mit Calendar.monthcalendar() sind. Nicht vorhandene Tage werden auf 0 gesetzt.

Dieses Beispiel verwendet pprint.

import calendar
import pprint

pprint.pprint(calendar.monthcalendar(2019, 1))
# [[0, 1, 2, 3, 4, 5, 6],
#  [7, 8, 9, 10, 11, 12, 13],
#  [14, 15, 16, 17, 18, 19, 20],
#  [21, 22, 23, 24, 25, 26, 27],
#  [28, 29, 30, 31, 0, 0, 0]]

Sie können den ersten Tag der Woche mit Calendar.setfirstweekday() angeben.

calendar.setfirstweekday(6)

pprint.pprint(calendar.monthcalendar(2019, 1))
# [[0, 0, 1, 2, 3, 4, 5],
#  [6, 7, 8, 9, 10, 11, 12],
#  [13, 14, 15, 16, 17, 18, 19],
#  [20, 21, 22, 23, 24, 25, 26],
#  [27, 28, 29, 30, 31, 0, 0]]

Sie können dieselbe Liste erhalten, indem Sie ein Objekt „calendar.Calendar“ erstellen und die Methode „monthdayscalendar()“ aufrufen. In dieser Methode können Sie den ersten Wochentag mit dem Parameter firstweekday des Konstruktors Calendar.Calendar() angeben.

c = calendar.Calendar(firstweekday=0)

pprint.pprint(c.monthdayscalendar(2019, 1))
# [[0, 1, 2, 3, 4, 5, 6],
#  [7, 8, 9, 10, 11, 12, 13],
#  [14, 15, 16, 17, 18, 19, 20],
#  [21, 22, 23, 24, 25, 26, 27],
#  [28, 29, 30, 31, 0, 0, 0]]

Sie können den Jahreskalender mit der Methode yeardayscalendar() des Objekts „calendar.Calendar“ abrufen. Wie bei reinem Text und HTML können Sie mit dem Parameter width die Anzahl der Monate pro Zeile angeben.

pprint.pprint(c.yeardayscalendar(2019), depth=2)
# [[[...], [...], [...]],
#  [[...], [...], [...]],
#  [[...], [...], [...]],
#  [[...], [...], [...]]]

pprint.pprint(c.yeardayscalendar(2019, width=4), depth=2)
# [[[...], [...], [...], [...]],
#  [[...], [...], [...], [...]],
#  [[...], [...], [...], [...]]]

Liste der Tupel

Sie können einen Kalender als Liste von Tupeln mit der Methode monthdays2calendar() von Calendar.Calendar erhalten. Jedes Tupel hat einen Wert von (Datum, Tag), und ein nicht vorhandenes Datum ist 0.

pprint.pprint(c.monthdays2calendar(2019, 1))
# [[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)],
#  [(7, 0), (8, 1), (9, 2), (10, 3), (11, 4), (12, 5), (13, 6)],
#  [(14, 0), (15, 1), (16, 2), (17, 3), (18, 4), (19, 5), (20, 6)],
#  [(21, 0), (22, 1), (23, 2), (24, 3), (25, 4), (26, 5), (27, 6)],
#  [(28, 0), (29, 1), (30, 2), (31, 3), (0, 4), (0, 5), (0, 6)]]

Verwenden Sie yeardays2calendar() für den Jahreskalender. Auf Beispiele wird hier verzichtet.

Liste von datetime.date

Sie können einen Kalender als Liste von datetime.date mit der Methode monthdatescalendar() von Calendar.Calendar erhalten.

Die erste und letzte Woche des Monats enthalten die Daten des vorangegangenen und des folgenden Monats.

pprint.pprint(c.monthdatescalendar(2019, 1))
# [[datetime.date(2018, 12, 31),
#   datetime.date(2019, 1, 1),
#   datetime.date(2019, 1, 2),
#   datetime.date(2019, 1, 3),
#   datetime.date(2019, 1, 4),
#   datetime.date(2019, 1, 5),
#   datetime.date(2019, 1, 6)],
#  [datetime.date(2019, 1, 7),
#   datetime.date(2019, 1, 8),
#   datetime.date(2019, 1, 9),
#   datetime.date(2019, 1, 10),
#   datetime.date(2019, 1, 11),
#   datetime.date(2019, 1, 12),
#   datetime.date(2019, 1, 13)],
#  [datetime.date(2019, 1, 14),
#   datetime.date(2019, 1, 15),
#   datetime.date(2019, 1, 16),
#   datetime.date(2019, 1, 17),
#   datetime.date(2019, 1, 18),
#   datetime.date(2019, 1, 19),
#   datetime.date(2019, 1, 20)],
#  [datetime.date(2019, 1, 21),
#   datetime.date(2019, 1, 22),
#   datetime.date(2019, 1, 23),
#   datetime.date(2019, 1, 24),
#   datetime.date(2019, 1, 25),
#   datetime.date(2019, 1, 26),
#   datetime.date(2019, 1, 27)],
#  [datetime.date(2019, 1, 28),
#   datetime.date(2019, 1, 29),
#   datetime.date(2019, 1, 30),
#   datetime.date(2019, 1, 31),
#   datetime.date(2019, 2, 1),
#   datetime.date(2019, 2, 2),
#   datetime.date(2019, 2, 3)]]

Verwenden Sie yeardatescalendar() für einen Jahreskalender. Auf Beispiele wird hier verzichtet.

Auf der Kommandozeile

Das Kalendermodul ist auch über die Befehlszeile verfügbar.

Rufen Sie den Kalender als Modul mit dem Befehl python (oder python3 in einigen Umgebungen) mit der Option -m auf.

python3 -m calendar 2019 1
#     January 2019
# Mo Tu We Th Fr Sa Su
#     1  2  3  4  5  6
#  7  8  9 10 11 12 13
# 14 15 16 17 18 19 20
# 21 22 23 24 25 26 27
# 28 29 30 31

Verschiedene Optionen sind ebenfalls verfügbar.

python3 -m calendar -h
# usage: calendar.py [-h] [-w WIDTH] [-l LINES] [-s SPACING] [-m MONTHS]
#                    [-c CSS] [-L LOCALE] [-e ENCODING] [-t {text,html}]
#                    [year] [month]
# 
# positional arguments:
#   year                  year number (1-9999)
#   month                 month number (1-12, text only)
# 
# optional arguments:
#   -h, --help            show this help message and exit
#   -L LOCALE, --locale LOCALE
#                         locale to be used from month and weekday names
#   -e ENCODING, --encoding ENCODING
#                         encoding to use for output
#   -t {text,html}, --type {text,html}
#                         output type (text or html)
# 
# text only arguments:
#   -w WIDTH, --width WIDTH
#                         width of date column (default 2)
#   -l LINES, --lines LINES
#                         number of lines for each week (default 1)
#   -s SPACING, --spacing SPACING
#                         spacing between months (default 6)
#   -m MONTHS, --months MONTHS
#                         months per row (default 3)
# 
# html only arguments:
#   -c CSS, --css CSS     CSS to use for page