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 a
Calendarobject.firstweekday is an integer specifying thefirst day of the week.MONDAYis0(the default),SUNDAYis6.A
Calendarobject 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.Calendarinstances have the following methods:- 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 ofthe
firstweekdayproperty.
- itermonthdates(year,month)¶
Return an iterator for the monthmonth (1–12) in the yearyear. Thisiterator will return all days (as
datetime.dateobjects) 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 to
itermonthdates(), 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 to
itermonthdates(), 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 to
itermonthdates(), but not restricted by thedatetime.daterange. Days returned will be tuples consisting of a year, a month and a dayof the month numbers.New in version 3.7.
- itermonthdays4(year,month)¶
Return an iterator for the monthmonth in the yearyear similar to
itermonthdates(), 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.New in version 3.7.
- monthdatescalendar(year,month)¶
Return a list of the weeks in the monthmonth of theyear as fullweeks. Weeks are lists of seven
datetime.dateobjects.
- 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 are
datetime.dateobjects.
- yeardays2calendar(year,width=3)¶
Return the data for the specified year ready for formatting (similar to
yeardatescalendar()). 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 to
yeardatescalendar()). 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.
TextCalendarinstances have the following methods:- 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 the
setfirstweekday()method.
- prmonth(theyear,themonth,w=0,l=0)¶
Print a month’s calendar as returned by
formatmonth().
- 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 the
setfirstweekday()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 by
formatyear().
- classcalendar.HTMLCalendar(firstweekday=0)¶
This class can be used to generate HTML calendars.
HTMLCalendarinstances 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.
Nonecan 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.
HTMLCalendarhas 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.
New 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 as
cssclasses.New in version 3.7.
- cssclass_month_head¶
The month’s head CSS class (used by
formatmonthname()).The default value is"month".New in version 3.7.
- cssclass_month¶
The CSS class for the whole month’s table (used by
formatmonth()).The default value is"month".New in version 3.7.
- cssclass_year¶
The CSS class for the whole year’s table of tables (used by
formatyear()). The default value is"year".New in version 3.7.
- cssclass_year_head¶
The CSS class for the table head for the whole year (used by
formatyear()). The default value is"year".New 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 how
HTMLCalendarcan 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 of
TextCalendarcan 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 of
HTMLCalendarcan 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 (
0is Monday,6is Sunday) to start each week. ThevaluesMONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY, andSUNDAYare 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.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 (
0is Monday) foryear (1970–…),month (1–12),day (1–31).
- 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 by
setfirstweekday().
- calendar.month(theyear,themonth,w=0,l=0)¶
Returns a month’s calendar in a multi-line string using the
formatmonth()of theTextCalendarclass.
- calendar.prcal(year,w=0,l=0,c=6,m=3)¶
Prints the calendar for an entire year as returned by
calendar().
- 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 usingthe
formatyear()of theTextCalendarclass.
- calendar.timegm(tuple)¶
An unrelated but handy function that takes a time tuple such as returned bythe
gmtime()function in thetimemodule, 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¶
An array that represents the days of the week in the current locale.
- calendar.day_abbr¶
An array that represents the abbreviated days of the week in the current locale.
- calendar.month_name¶
An array 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 and
month_name[0]is the empty string.
- calendar.month_abbr¶
An array 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 and
month_abbr[0]is the empty string.
- calendar.MONDAY¶
- calendar.TUESDAY¶
- calendar.WEDNESDAY¶
- calendar.THURSDAY¶
- calendar.FRIDAY¶
- calendar.SATURDAY¶
- calendar.SUNDAY¶
Aliases for day numbers, where
MONDAYis0andSUNDAYis6.
Thecalendar module defines the following exceptions:
- exceptioncalendar.IllegalMonthError(month)¶
A subclass of
ValueError,raised when the given month number is outside of the range 1-12 (inclusive).- month¶
The invalid month number.
- exceptioncalendar.IllegalWeekdayError(weekday)¶
A subclass of
ValueError,raised when the given weekday number is outside of the range 0-6 (inclusive).- weekday¶
The invalid weekday number.
See also
Command-Line Usage¶
New 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][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.
--encodingis required if--localeis set.
- --type{text,html},-t{text,html}¶
Print the calendar to the terminal as text,or as an HTML document.
- year¶
The year to print the calendar for.Must be a number between 1 and 9999.Defaults to the current year.
- month¶
The month of the specified
yearto 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 or
file:///URL.