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.0 is Monday (the default),6 is Sunday.

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:

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.

New 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.

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

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.

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).

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.

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 ascssclasses.

New in version 3.7.

cssclass_month_head

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

New in version 3.7.

cssclass_month

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

New in version 3.7.

cssclass_year

The CSS class for the whole year’s table of tables (used byformatyear()). 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 byformatyear()). 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 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.If this locale includes an encoding all strings containing month and weekdaynames will be returned as unicode.

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. If this locale includes an encoding all strings containing month andweekday names will be returned as unicode.

Note

Theformatweekday() andformatmonthname() methods of these twoclasses temporarily change the current locale to the givenlocale. Becausethe current locale is a process-wide setting, they are not 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

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 andmonth_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 andmonth_abbr[0] is the empty string.

See also

Moduledatetime

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

Moduletime

Low-level time related functions.