calendar — Allmänna kalenderrelaterade funktioner

Källkod: Lib/calendar.py


Med den här modulen kan du skriva ut kalendrar på samma sätt som med Unix-programmet cal, och du får tillgång till ytterligare användbara funktioner som är relaterade till kalendern. Som standard har dessa kalendrar måndag som veckans första dag och söndag som den sista (den europeiska konventionen). Använd setfirstweekday() för att ställa in veckans första dag till söndag (6) eller till någon annan veckodag. Parametrar som anger datum anges som heltal. För relaterad funktionalitet, se även modulerna datetime och time.

De funktioner och klasser som definieras i denna modul använder en idealiserad kalender, den nuvarande gregorianska kalendern förlängd på obestämd tid i båda riktningarna. Detta motsvarar definitionen av den ”proleptiska gregorianska” kalendern i Dershowitz och Reingolds bok ”Calendrical Calculations”, där den är baskalendern för alla beräkningar. Noll och negativa år tolkas enligt ISO 8601-standarden. År 0 är 1 f.Kr., år -1 är 2 f.Kr. och så vidare.

class calendar.Calendar(firstweekday=0)

Skapar ett Calendar-objekt. firstweekday är ett heltal som anger den första dagen i veckan. MONDAY är 0 (standard), SUNDAY är 6.

Ett Calendar-objekt tillhandahåller flera metoder som kan användas för att förbereda kalenderdata för formatering. Den här klassen gör inte någon formatering själv. Detta är ett jobb för underklasser.

Calendar-instanser har följande metoder och attribut:

firstweekday

Den första veckodagen som ett heltal (0–6).

Denna egenskap kan också ställas in och läsas med setfirstweekday() respektive getfirstweekday().

getfirstweekday()

Returnerar en int för den aktuella första veckodagen (0–6).

Identiskt med att läsa egenskapen firstweekday.

setfirstweekday(firstweekday)

Ställ in den första veckodagen till firstweekday, som skickas som en int (0–6)

Identiskt med att ställa in egenskapen firstweekday.

iterweekdays()

Returnerar en iterator för de veckodagsnummer som kommer att användas för en vecka. Det första värdet från iteratorn kommer att vara detsamma som värdet för egenskapen firstweekday.

itermonthdates(year, month)

Returnerar en iterator för månaden month (1–12) i året year. Denna iterator returnerar alla dagar (som datetime.date-objekt) för månaden och alla dagar före månadens början eller efter månadens slut som krävs för att få en komplett vecka.

itermonthdays(year, month)

Returnerar en iterator för månaden month i året year liknande itermonthdates(), men inte begränsad av datetime.date intervallet. Dagar som returneras kommer helt enkelt att vara nummer för dag i månaden. För dagar som ligger utanför den angivna månaden är dagsnumret 0.

itermonthdays2(year, month)

Returnerar en iterator för månaden month i året year liknande itermonthdates(), men inte begränsad av datetime.date intervallet. Dagar som returneras är tupler som består av ett nummer för dagen i månaden och ett nummer för veckodagen.

itermonthdays3(year, month)

Returnerar en iterator för månaden månad i året år liknande itermonthdates(), men inte begränsad av intervallet datetime.date. Dagar som returneras är tupler som består av ett år, en månad och en dag i månaden.

Tillagd i version 3.7.

itermonthdays4(year, month)

Returnerar en iterator för månaden månad i året år liknande itermonthdates(), men inte begränsad av intervallet datetime.date. Dagar som returneras kommer att vara tupler som består av ett år, en månad, en dag i månaden och en veckodag.

Tillagd i version 3.7.

monthdatescalendar(year, month)

Returnerar en lista över veckorna i månaden månad i året som hela veckor. Veckorna är listor med sju datetime.date-objekt.

monthdays2calendar(year, month)

Returnerar en lista över veckorna i månaden månad i år som hela veckor. Veckorna är listor med sju tupler av dagsnummer och veckodagsnummer.

monthdayscalendar(year, month)

Returnerar en lista med veckorna i månaden månad i år som hela veckor. Veckorna är listor med sjudagarsnummer.

yeardatescalendar(year, width=3)

Returnerar data för det angivna året som är redo för formatering. Returvärdet är en lista med månadsrader. Varje månadsrad innehåller upp till bredd månader (standard är 3). Varje månad innehåller mellan 4 och 6 veckor och varje vecka innehåller 1–7 dagar. Dagar är datetime.date-objekt.

yeardays2calendar(year, width=3)

Returnerar data för det angivna året redo för formatering (liknande yeardatescalendar()). Posterna i veckolistorna är tupler av dagsnummer och veckodagsnummer. Dagnummer utanför denna månad är noll.

yeardayscalendar(year, width=3)

Returnerar data för det angivna året redo för formatering (liknande yeardatescalendar()). Posterna i veckolistorna är dagnummer. Dagnummer utanför denna månad är noll.

class calendar.TextCalendar(firstweekday=0)

Denna klass kan användas för att generera kalendrar i klartext.

TextCalendar-instanser har följande metoder:

formatday(theday, weekday, width)

Returnerar en sträng som representerar en enda dag formaterad med den angivna bredden. Om theday är 0, returneras en sträng med mellanslag med angiven bredd, som representerar en tom dag. Parametern weekday är oanvänd.

formatweek(theweek, w=0)

Returnerar en enskild vecka i en sträng utan ny rad. Om w anges, specificerar det bredden på datumkolumnerna, som är centrerade. Beror på den första veckodagen som anges i konstruktören eller ställs in med metoden setfirstweekday().

formatweekday(weekday, width)

Returnerar en sträng som representerar namnet på en enskild veckodag formaterad till den angivna bredden. Parametern weekday är ett heltal som representerar veckodagen, där 0 är måndag och 6 är söndag.

formatweekheader(width)

Returnerar en sträng som innehåller rubrikraden med veckodagsnamn, formaterad med angiven bredd för varje kolumn. Namnen beror på lokalinställningarna och fylls på med den angivna bredden.

formatmonth(theyear, themonth, w=0, l=0)

Returnerar en månads kalender i en sträng med flera rader. Om w anges, specificerar det bredden på datumkolumnerna, som är centrerade. Om l anges, specificerar det antalet rader som varje vecka ska använda. Beror på den första veckodagen som anges i konstruktören eller ställs in med metoden setfirstweekday().

formatmonthname(theyear, themonth, width=0, withyear=True)

Returnerar en sträng som representerar månadens namn centrerat inom den angivna bredden. Om withyear är True inkluderas året i utdata. Parametrarna theyear och themonth anger året respektive månaden för det namn som ska formateras.

prmonth(theyear, themonth, w=0, l=0)

Skriv ut en månads kalender som den returneras av formatmonth().

formatyear(theyear, w=2, l=1, c=6, m=3)

Returnerar en kalender med m-kolumner för ett helt år som en sträng med flera rader. De valfria parametrarna w, l och c anger datumkolumnens bredd, rader per vecka respektive antal mellanslag mellan månadskolumnerna. Beror på den första veckodagen som anges i konstruktören eller ställs in med metoden setfirstweekday(). Det tidigaste året för vilket en kalender kan genereras är plattformsberoende.

pryear(theyear, w=2, l=1, c=6, m=3)

Skriv ut kalendern för ett helt år enligt formatyear().

class calendar.HTMLCalendar(firstweekday=0)

Denna klass kan användas för att generera HTML-kalendrar.

HTMLCalendar-instanser har följande metoder:

formatmonth(theyear, themonth, withyear=True)

Returnerar en månads kalender som en HTML-tabell. Om withyear är true kommer året att inkluderas i sidhuvudet, annars används bara månadsnamnet.

formatyear(theyear, width=3)

Returnerar en kalender för ett år som en HTML-tabell. width (standard är 3) anger antalet månader per rad.

formatyearpage(theyear, width=3, css='calendar.css', encoding=None)

Returnerar ett års kalender som en komplett HTML-sida. width (standard är 3) anger antalet månader per rad. css är namnet på den kaskadformatmall som ska användas. None kan anges om ingen formatmall ska användas. encoding anger den kodning som ska användas för utdata (standard är systemets standardkodning).

formatmonthname(theyear, themonth, withyear=True)

Returnerar ett månadsnamn som en HTML-tabellrad. Om withyear är true kommer året att inkluderas i raden, annars kommer bara månadsnamnet att användas.

HTMLCalendar har följande attribut som du kan åsidosätta för att anpassa de CSS-klasser som används av kalendern:

cssclasses

En lista över CSS-klasser som används för varje veckodag. Standardklasslistan är:

cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]

fler stilar kan läggas till för varje dag:

cssclasses = ["mon text-bold", "tue", "wed", "thu", "fri", "sat", "sun red"]

Observera att längden på denna lista måste vara sju punkter.

cssclass_noday

CSS-klassen för en veckodag som infaller under föregående eller kommande månad.

Tillagd i version 3.7.

cssclasses_weekday_head

En lista med CSS-klasser som används för veckodagsnamn i rubrikraden. Standardvärdet är detsamma som för cssclasses.

Tillagd i version 3.7.

cssclass_month_head

CSS-klassen för månadens huvud (används av formatmonthname()). Standardvärdet är "month".

Tillagd i version 3.7.

cssclass_month

CSS-klassen för hela månadens tabell (används av formatmonth()). Standardvärdet är "month".

Tillagd i version 3.7.

cssclass_year

CSS-klassen för hela årets tabell av tabeller (används av formatyear()). Standardvärdet är "year".

Tillagd i version 3.7.

cssclass_year_head

CSS-klassen för tabellhuvudet för hela året (används av formatyear()). Standardvärdet är "year".

Tillagd i version 3.7.

Observera att även om namngivningen för de ovan beskrivna klassattributen är singular (t.ex. cssclass_month cssclass_noday), kan man ersätta den enskilda CSS-klassen med en mellanslagsseparerad lista över CSS-klasser, till exempel:

"text-bold text-red"

Här är ett exempel på hur HTMLCalendar kan anpassas:

class CustomHTMLCal(kalender.HTMLCalendar):
    cssclasses = [style + " text-nowrap" for style in
                  calendar.HTMLCalendar.cssclasses]
    cssclass_month_head = "text-center månad-huvud"
    cssclass_month = "text-center månad"
    cssclass_year = "text-italic lead"
class calendar.LocaleTextCalendar(firstweekday=0, locale=None)

Denna subklass av TextCalendar kan ges ett lokalt namn i konstruktören och returnerar namn på månader och veckodagar i den angivna lokalen.

class calendar.LocaleHTMLCalendar(firstweekday=0, locale=None)

Denna subklass av HTMLCalendar kan ges ett lokalt namn i konstruktören och returnerar namn på månader och veckodagar i det angivna lokala språket.

Anteckning

Metoderna constructor, formatweekday() och formatmonthname() i dessa två klasser ändrar temporärt LC_TIME locale till den angivna locale. Eftersom den aktuella locale är en processomfattande inställning är de inte trådsäkra.

För enkla textkalendrar tillhandahåller denna modul följande funktioner.

calendar.setfirstweekday(weekday)

Anger vilken veckodag (0 är måndag, 6 är söndag) som ska börja varje vecka. Värdena MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY och SUNDAY anges för enkelhets skull. Till exempel, för att ställa in den första veckodagen till söndag:

import calendar
calendar.setfirstweekday(calendar.SUNDAY)
calendar.firstweekday()

Returnerar den aktuella inställningen för vilken veckodag som ska starta varje vecka.

calendar.isleap(year)

Returnerar True om year är ett skottår, annars False.

calendar.leapdays(y1, y2)

Returnerar antalet skottår i intervallet från y1 till y2 (exklusive), där y1 och y2 är årtal.

Denna funktion fungerar för intervall som sträcker sig över ett sekelskifte.

calendar.weekday(year, month, day)

Returnerar veckodagen (0 är måndag) för år (1970–…), month (112), dag (131).

calendar.weekheader(n)

Returnerar en header som innehåller förkortade veckodagsnamn. n anger bredden i tecken för en veckodag.

calendar.monthrange(year, month)

Returnerar veckodag för första dagen i månaden och antal dagar i månaden, för angivna år och månad.

calendar.monthcalendar(year, month)

Returnerar en matris som representerar en månads kalender. Varje rad representerar en vecka; dagar utanför månaden representeras av nollor. Varje vecka börjar med måndag om den inte har ställts in med setfirstweekday().

calendar.prmonth(theyear, themonth, w=0, l=0)

Skriver ut en månads kalender som den returneras av month().

calendar.month(theyear, themonth, w=0, l=0)

Returnerar en månads kalender i en flerradig sträng med hjälp av formatmonth() i klassen TextCalendar.

calendar.prcal(year, w=0, l=0, c=6, m=3)

Skriver ut kalendern för ett helt år som returneras av calendar().

calendar.calendar(year, w=2, l=1, c=6, m=3)

Returnerar en kalender med 3 kolumner för ett helt år som en sträng med flera rader med formatyear() i klassen TextCalendar.

calendar.timegm(tuple)

En orelaterad men praktisk funktion som tar en tidstupel, som den som returneras av funktionen gmtime() i modulen time, och returnerar motsvarande Unix-tidsstämpelvärde, med epoken 1970 och POSIX-kodning. I själva verket är time.gmtime() och timegm() varandras invers.

Modulen calendar exporterar följande dataattribut:

calendar.day_name

En sekvens som representerar veckodagarna i den aktuella språkversionen, där måndag är dag nummer 0.

>>> import calendar
>>> list(calendar.day_name)
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
calendar.day_abbr

En sekvens som representerar de förkortade veckodagarna i den aktuella språkversionen, där Mon är dag nummer 0.

>>> import calendar
>>> list(calendar.day_abbr)
['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
calendar.MONDAY
calendar.TUESDAY
calendar.WEDNESDAY
calendar.THURSDAY
calendar.FRIDAY
calendar.SATURDAY
calendar.SUNDAY

Aliasnamn för veckodagarna, där MONDAY är 0 och SUNDAY är 6.

Tillagd i version 3.12.

class calendar.Day

Enumeration som definierar veckodagar som heltalskonstanter. Medlemmarna i denna uppräkning exporteras till modulens omfattning som MONDAY till SUNDAY.

Tillagd i version 3.12.

calendar.month_name

En sekvens som representerar årets månader i den aktuella locale. Detta följer den normala konventionen att januari är månad nummer 1, så den har en längd på 13 och month_name[0] är den tomma strängen.

>>> import calendar
>>> list(calendar.month_name)
['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
calendar.month_abbr

En sekvens som representerar årets förkortade månader i aktuell lokal. Detta följer den normala konventionen att januari är månad nummer 1, så den har en längd på 13 och month_abbr[0] är den tomma strängen.

>>> import calendar
>>> list(calendar.month_abbr)
['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
calendar.JANUARY
calendar.FEBRUARY
calendar.MARCH
calendar.APRIL
calendar.MAY
calendar.JUNE
calendar.JULY
calendar.AUGUST
calendar.SEPTEMBER
calendar.OCTOBER
calendar.NOVEMBER
calendar.DECEMBER

Alias för årets månader, där JANUARI är 1 och DECEMBER är 12.

Tillagd i version 3.12.

class calendar.Month

Enumeration som definierar årets månader som heltalskonstanter. Medlemmarna i denna uppräkning exporteras till modulens omfattning som JANUARY till DECEMBER.

Tillagd i version 3.12.

Modulen calendar definierar följande undantag:

exception calendar.IllegalMonthError(month)

En subklass av ValueError som uppstår när det angivna månadsnumret ligger utanför intervallet 1-12 (inklusive).

month

Det ogiltiga månadsnumret.

exception calendar.IllegalWeekdayError(weekday)

En subklass av ValueError som uppstår när det angivna veckodagsnumret ligger utanför intervallet 0-6 (inklusive).

weekday

Det ogiltiga veckodagsnumret.

Se även

Modul datetime

Objektorienterat gränssnitt för datum och tid med liknande funktionalitet som modulen time.

Modul tid

Tidsrelaterade funktioner på låg nivå.

Användning av kommandoraden

Tillagd i version 2.5.

Modulen calendar kan köras som ett skript från kommandoraden för att interaktivt skriva ut en kalender.

python -m calendar [-h] [-L LOCALE] [-e ENCODING] [-t {text,html}] [-w WIDTH] [-l LINES] [-s SPACING] [-m MONTHS] [-c CSS
                   [-w WIDTH] [-l LINES] [-s SPACING] [-m MONTHS] [-c CSS]
                   [-f FÖRSTA_VECKODAGEN] [år] [månad]

Till exempel för att skriva ut en kalender för år 2000:

$ python -m kalender 2000
                                  2000

      Januari Februari Mars
Mån tu ons tors fre sö mån tu ons tors fre sö mån tu ons tors fre sö mån tu ons tors fre sö
                1 2 1 2 3 4 5 6 1 2 3 4 5
 3 4 5 6 7 8 9 7 8 9 10 11 12 13 6 7 8 9 10 11 12
10 11 12 13 14 15 16 14 15 16 17 18 19 20 13 14 15 16 17 18 19
17 18 19 20 21 22 23 21 22 23 24 25 26 27 20 21 22 23 24 25 26
24 25 26 27 28 29 30 28 29 27 28 29 30 31
31

       April Maj Juni
Mån tu ons ti fr sa su mån tu ons ti fr sa su mån tu ons ti fr sa su mån tu ons ti fr sa su
                1 2 1 2 3 4 5 6 7 1 2 3 4
 3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
24 25 26 27 28 29 30 29 30 31 26 27 28 29 30

        Juli Augusti September
Mån tu ons tors fre sö mån tu ons tors fre sö mån tu ons tors fre sö mån tu ons tors fre sö
                1 2 1 2 3 4 5 6 1 2 3
 3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10
10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17
17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24
24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30
31

      Oktober November December
Mo Tu Vi Th Fr Sa Su Mo Tu Vi Th Fr Sa Su Mo Tu Vi Th Fr Sa Su Mo Tu Vi Th Fr Sa Su
                   1 1 2 3 4 5 1 2 3
 2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10
 9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17
16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24
23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31
30 31

Följande alternativ accepteras:

--help, -h

Visa hjälpmeddelandet och avsluta.

--locale LOCALE, -L LOCALE

Det språk som ska användas för namn på månad och veckodag. Standardvärdet är engelska.

--encoding ENCODING, -e ENCODING

Den kodning som ska användas för utdata. --encoding krävs om --locale har angetts.

--type {text,html}, -t {text,html}

Skriv ut kalendern till terminalen som text eller som ett HTML-dokument.

--first-weekday FIRST_WEEKDAY, -f FIRST_WEEKDAY

Den veckodag som ska starta varje vecka. Måste vara ett tal mellan 0 (måndag) och 6 (söndag). Standardvärdet är 0.

Tillagd i version 3.13.

year

Det år som kalendern ska skrivas ut för. Standardvärdet är innevarande år.

month

Den månad i det angivna year som kalendern ska skrivas ut för. Måste vara ett tal mellan 1 och 12 och kan endast användas i textläge. Standard är att skriva ut en kalender för hela året.

Alternativ för textläge:

--width WIDTH, -w WIDTH

Datumkolumnens bredd i terminalkolumner. Datumet skrivs ut centrerat i kolumnen. Alla värden lägre än 2 ignoreras. Standardvärdet är 2.

--lines LINES, -l LINES

Antalet rader för varje vecka i terminalrader. Datumet skrivs ut toppjusterat. Alla värden lägre än 1 ignoreras. Standardvärdet är 1.

--spacing SPACING, -s SPACING

Mellanrummet mellan månader i kolumner. Alla värden lägre än 2 ignoreras. Standardvärdet är 6.

--months MONTHS, -m MONTHS

Antal månader som skrivs ut per rad. Standardvärdet är 3.

Ändrad i version 3.14: Som standard är dagens datum markerat i färg och kan kontrolleras med hjälp av miljövariabler.

Alternativ för HTML-läge:

--css CSS, -c CSS

Sökvägen till en CSS-stilmall som ska användas för kalendern. Den måste antingen vara relativ till den genererade HTML-filen eller en absolut HTTP- eller file:/// -URL.