calendar — General calendar-related functions

Source code:Lib/calendar.py


This module allows you to output calendars like the Unixcal program,and provides additional useful functions related to the calendar. By default,these calendars have Monday as the first day of the week, and Sunday as the last(the European convention). Usesetfirstweekday() to set the first day ofthe week to Sunday (6) or to any other weekday. Parameters that specify datesare given as integers. For relatedfunctionality, see also thedatetime andtime modules.

The functions and classes defined in this moduleuse an idealized calendar, the current Gregorian calendar extended indefinitelyin both directions. This matches the definition of the “proleptic Gregorian”calendar in Dershowitz and Reingold’s book “Calendrical Calculations”, whereit’s the base calendar for all computations. Zero and negative years areinterpreted as prescribed by the ISO 8601 standard. Year 0 is 1 BC, year -1 is2 BC, and so on.

classcalendar.Calendar(firstweekday=0)

Creates aCalendar object.firstweekday is an integer specifying thefirst day of the week.MONDAY is0 (the default),SUNDAY is6.

ACalendar object provides several methods that can be used forpreparing the calendar data for formatting. This class doesn’t do any formattingitself. This is the job of subclasses.

Calendar instances have the following methods and attributes:

firstweekday

The first weekday as an integer (0–6).

This property can also be set and read usingsetfirstweekday() andgetfirstweekday() respectively.

getfirstweekday()

Return anint for the current first weekday (0–6).

Identical to reading thefirstweekday property.

setfirstweekday(firstweekday)

Set the first weekday tofirstweekday, passed as anint (0–6)

Identical to setting thefirstweekday property.

iterweekdays()

Return an iterator for the week day numbers that will be used for oneweek. The first value from the iterator will be the same as the value ofthefirstweekday property.

itermonthdates(year,month)

Return an iterator for the monthmonth (1–12) in the yearyear. Thisiterator will return all days (asdatetime.date objects) for themonth and all days before the start of the month or after the end of themonth that are required to get a complete week.

itermonthdays(year,month)

Return an iterator for the monthmonth in the yearyear similar toitermonthdates(), but not restricted by thedatetime.daterange. Days returned will simply be day of the month numbers. For thedays outside of the specified month, the day number is0.

itermonthdays2(year,month)

Return an iterator for the monthmonth in the yearyear similar toitermonthdates(), but not restricted by thedatetime.daterange. Days returned will be tuples consisting of a day of the monthnumber and a week day number.

itermonthdays3(year,month)

Return an iterator for the monthmonth in the yearyear similar toitermonthdates(), but not restricted by thedatetime.daterange. Days returned will be tuples consisting of a year, a month and a dayof the month numbers.

Added in version 3.7.

itermonthdays4(year,month)

Return an iterator for the monthmonth in the yearyear similar toitermonthdates(), but not restricted by thedatetime.daterange. Days returned will be tuples consisting of a year, a month, a dayof the month, and a day of the week numbers.

Added in version 3.7.

monthdatescalendar(year,month)

Return a list of the weeks in the monthmonth of theyear as fullweeks. Weeks are lists of sevendatetime.date objects.

monthdays2calendar(year,month)

Return a list of the weeks in the monthmonth of theyear as fullweeks. Weeks are lists of seven tuples of day numbers and weekdaynumbers.

monthdayscalendar(year,month)

Return a list of the weeks in the monthmonth of theyear as fullweeks. Weeks are lists of seven day numbers.

yeardatescalendar(year,width=3)

Return the data for the specified year ready for formatting. The returnvalue is a list of month rows. Each month row contains up towidthmonths (defaulting to 3). Each month contains between 4 and 6 weeks andeach week contains 1–7 days. Days aredatetime.date objects.

yeardays2calendar(year,width=3)

Return the data for the specified year ready for formatting (similar toyeardatescalendar()). Entries in the week lists are tuples of daynumbers and weekday numbers. Day numbers outside this month are zero.

yeardayscalendar(year,width=3)

Return the data for the specified year ready for formatting (similar toyeardatescalendar()). Entries in the week lists are day numbers. Daynumbers outside this month are zero.

classcalendar.TextCalendar(firstweekday=0)

This class can be used to generate plain text calendars.

TextCalendar instances have the following methods:

formatday(theday,weekday,width)

Return a string representing a single day formatted with the givenwidth.Iftheday is0, return a string of spaces ofthe specified width, representing an empty day. Theweekday parameteris unused.

formatweek(theweek,w=0)

Return a single week in a string with no newline. Ifw is provided, itspecifies the width of the date columns, which are centered. Dependson the first weekday as specified in the constructor or set by thesetfirstweekday() method.

formatweekday(weekday,width)

Return a string representing the name of a single weekday formatted tothe specifiedwidth. Theweekday parameter is an integer representingthe day of the week, where0 is Monday and6 is Sunday.

formatweekheader(width)

Return a string containing the header row of weekday names, formattedwith the givenwidth for each column. The names depend on the localesettings and are padded to the specified width.

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

Return a month’s calendar in a multi-line string. Ifw is provided, itspecifies the width of the date columns, which are centered. Ifl isgiven, it specifies the number of lines that each week will use. Dependson the first weekday as specified in the constructor or set by thesetfirstweekday() method.

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

Return a string representing the month’s name centered within thespecifiedwidth. Ifwithyear isTrue, include the year in theoutput. Thetheyear andthemonth parameters specify the yearand month for the name to be formatted respectively.

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

Print a month’s calendar as returned byformatmonth().

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

Return am-column calendar for an entire year as a multi-line string.Optional parametersw,l, andc are for date column width, lines perweek, and number of spaces between month columns, respectively. Depends onthe first weekday as specified in the constructor or set by thesetfirstweekday() method. The earliest year for which a calendarcan be generated is platform-dependent.

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

Print the calendar for an entire year as returned byformatyear().

classcalendar.HTMLCalendar(firstweekday=0)

This class can be used to generate HTML calendars.

HTMLCalendar instances have the following methods:

formatmonth(theyear,themonth,withyear=True)

Return a month’s calendar as an HTML table. Ifwithyear is true the yearwill be included in the header, otherwise just the month name will beused.

formatyear(theyear,width=3)

Return a year’s calendar as an HTML table.width (defaulting to 3)specifies the number of months per row.

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

Return a year’s calendar as a complete HTML page.width (defaulting to3) specifies the number of months per row.css is the name for thecascading style sheet to be used.None can be passed if no stylesheet should be used.encoding specifies the encoding to be used for theoutput (defaulting to the system default encoding).

formatmonthname(theyear,themonth,withyear=True)

Return a month name as an HTML table row. Ifwithyear is true the yearwill be included in the row, otherwise just the month name will beused.

HTMLCalendar has the following attributes you can override tocustomize the CSS classes used by the calendar:

cssclasses

A list of CSS classes used for each weekday. The default class list is:

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

more styles can be added for each day:

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

Note that the length of this list must be seven items.

cssclass_noday

The CSS class for a weekday occurring in the previous or coming month.

Added in version 3.7.

cssclasses_weekday_head

A list of CSS classes used for weekday names in the header row.The default is the same ascssclasses.

Added in version 3.7.

cssclass_month_head

The month’s head CSS class (used byformatmonthname()).The default value is"month".

Added in version 3.7.

cssclass_month

The CSS class for the whole month’s table (used byformatmonth()).The default value is"month".

Added in version 3.7.

cssclass_year

The CSS class for the whole year’s table of tables (used byformatyear()). The default value is"year".

Added in version 3.7.

cssclass_year_head

The CSS class for the table head for the whole year (used byformatyear()). The default value is"year".

Added in version 3.7.

Note that although the naming for the above described class attributes issingular (e.g.cssclass_monthcssclass_noday), one can replace thesingle CSS class with a space separated list of CSS classes, for example:

"text-bold text-red"

Here is an example howHTMLCalendar can be customized:

classCustomHTMLCal(calendar.HTMLCalendar):cssclasses=[style+" text-nowrap"forstyleincalendar.HTMLCalendar.cssclasses]cssclass_month_head="text-center month-head"cssclass_month="text-center month"cssclass_year="text-italic lead"
classcalendar.LocaleTextCalendar(firstweekday=0,locale=None)

This subclass ofTextCalendar can be passed a locale name in theconstructor and will return month and weekday names in the specified locale.

classcalendar.LocaleHTMLCalendar(firstweekday=0,locale=None)

This subclass ofHTMLCalendar can be passed a locale name in theconstructor and will return month and weekday names in the specifiedlocale.

Note

The constructor,formatweekday() andformatmonthname() methodsof these two classes temporarily change theLC_TIME locale to the givenlocale. Because the current locale is a process-wide setting, they arenot thread-safe.

For simple text calendars this module provides the following functions.

calendar.setfirstweekday(weekday)

Sets the weekday (0 is Monday,6 is Sunday) to start each week. ThevaluesMONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY, andSUNDAY are provided forconvenience. For example, to set the first weekday to Sunday:

importcalendarcalendar.setfirstweekday(calendar.SUNDAY)
calendar.firstweekday()

Returns the current setting for the weekday to start each week.

calendar.isleap(year)

ReturnsTrue ifyear is a leap year, otherwiseFalse.

calendar.leapdays(y1,y2)

Returns the number of leap years in the range fromy1 toy2 (exclusive),wherey1 andy2 are years.

This function works for ranges spanning a century change.

calendar.weekday(year,month,day)

Returns the day of the week (0 is Monday) foryear (1970–…),month (112),day (131).

calendar.weekheader(n)

Return a header containing abbreviated weekday names.n specifies the width incharacters for one weekday.

calendar.monthrange(year,month)

Returns weekday of first day of the month and number of days in month, for thespecifiedyear andmonth.

calendar.monthcalendar(year,month)

Returns a matrix representing a month’s calendar. Each row represents a week;days outside of the month are represented by zeros. Each week begins with Mondayunless set bysetfirstweekday().

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

Prints a month’s calendar as returned bymonth().

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

Returns a month’s calendar in a multi-line string using theformatmonth()of theTextCalendar class.

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

Prints the calendar for an entire year as returned bycalendar().

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

Returns a 3-column calendar for an entire year as a multi-line string usingtheformatyear() of theTextCalendar class.

calendar.timegm(tuple)

An unrelated but handy function that takes a time tuple such as returned bythegmtime() function in thetime module, and returns thecorresponding Unix timestamp value, assuming an epoch of 1970, and the POSIXencoding. In fact,time.gmtime() andtimegm() are each others’inverse.

Thecalendar module exports the following data attributes:

calendar.day_name

A sequence that represents the days of the week in the current locale,where Monday is day number 0.

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

A sequence that represents the abbreviated days of the week in the current locale,where Mon is day number 0.

>>>importcalendar>>>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

Aliases for the days of the week,whereMONDAY is0 andSUNDAY is6.

Added in version 3.12.

classcalendar.Day

Enumeration defining days of the week as integer constants.The members of this enumeration are exported to the module scope asMONDAY throughSUNDAY.

Added in version 3.12.

calendar.month_name

A sequence that represents the months of the year in the current locale. Thisfollows normal convention of January being month number 1, so it has a length of13 andmonth_name[0] is the empty string.

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

A sequence that represents the abbreviated months of the year in the currentlocale. This follows normal convention of January being month number 1, so ithas a length of 13 andmonth_abbr[0] is the empty string.

>>>importcalendar>>>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

Aliases for the months of the year,whereJANUARY is1 andDECEMBER is12.

Added in version 3.12.

classcalendar.Month

Enumeration defining months of the year as integer constants.The members of this enumeration are exported to the module scope asJANUARY throughDECEMBER.

Added in version 3.12.

Thecalendar module defines the following exceptions:

exceptioncalendar.IllegalMonthError(month)

A subclass ofValueError,raised when the given month number is outside of the range 1-12 (inclusive).

month

The invalid month number.

exceptioncalendar.IllegalWeekdayError(weekday)

A subclass ofValueError,raised when the given weekday number is outside of the range 0-6 (inclusive).

weekday

The invalid weekday number.

See also

Moduledatetime

Object-oriented interface to dates and times with similar functionality to thetime module.

Moduletime

Low-level time related functions.

Command-Line Usage

Added in version 2.5.

Thecalendar module can be executed as a script from the command lineto interactively print a calendar.

python-mcalendar[-h][-LLOCALE][-eENCODING][-t{text,html}][-wWIDTH][-lLINES][-sSPACING][-mMONTHS][-cCSS][-fFIRST_WEEKDAY][year][month]

For example, to print a calendar for the year 2000:

$python-mcalendar2000                                  2000      January                   February                   MarchMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                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 1210 11 12 13 14 15 16      14 15 16 17 18 19 20      13 14 15 16 17 18 1917 18 19 20 21 22 23      21 22 23 24 25 26 27      20 21 22 23 24 25 2624 25 26 27 28 29 30      28 29                     27 28 29 30 3131       April                      May                       JuneMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th 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 1110 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 1817 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 2524 25 26 27 28 29 30      29 30 31                  26 27 28 29 30        July                     August                  SeptemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                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 1010 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 1717 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 2424 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 3031      October                   November                  DecemberMo 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                   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 1716 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 2423 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 3130 31

The following options are accepted:

--help,-h

Show the help message and exit.

--localeLOCALE,-LLOCALE

The locale to use for month and weekday names.Defaults to English.

--encodingENCODING,-eENCODING

The encoding to use for output.--encoding is required if--locale is set.

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

Print the calendar to the terminal as text,or as an HTML document.

--first-weekdayFIRST_WEEKDAY,-fFIRST_WEEKDAY

The weekday to start each week.Must be a number between 0 (Monday) and 6 (Sunday).Defaults to 0.

Added in version 3.13.

year

The year to print the calendar for.Defaults to the current year.

month

The month of the specifiedyear to print the calendar for.Must be a number between 1 and 12,and may only be used in text mode.Defaults to printing a calendar for the full year.

Text-mode options:

--widthWIDTH,-wWIDTH

The width of the date column in terminal columns.The date is printed centred in the column.Any value lower than 2 is ignored.Defaults to 2.

--linesLINES,-lLINES

The number of lines for each week in terminal rows.The date is printed top-aligned.Any value lower than 1 is ignored.Defaults to 1.

--spacingSPACING,-sSPACING

The space between months in columns.Any value lower than 2 is ignored.Defaults to 6.

--monthsMONTHS,-mMONTHS

The number of months printed per row.Defaults to 3.

HTML-mode options:

--cssCSS,-cCSS

The path of a CSS stylesheet to use for the calendar.This must either be relative to the generated HTML,or an absolute HTTP orfile:/// URL.