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
Calendar
object.firstweekday is an integer specifying thefirst day of the week.MONDAY
is0
(the default),SUNDAY
is6
.A
Calendar
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 using
setfirstweekday()
andgetfirstweekday()
respectively.
- getfirstweekday()¶
Return an
int
for the current first weekday (0–6).Identical to reading the
firstweekday
property.
- setfirstweekday(firstweekday)¶
Set the first weekday tofirstweekday, passed as an
int
(0–6)Identical to setting the
firstweekday
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 ofthe
firstweekday
property.
- itermonthdates(year,month)¶
Return an iterator for the monthmonth (1–12) in the yearyear. Thisiterator will return all days (as
datetime.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 to
itermonthdates()
, but not restricted by thedatetime.date
range. 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.date
range. 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.date
range. 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 to
itermonthdates()
, but not restricted by thedatetime.date
range. 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 seven
datetime.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 are
datetime.date
objects.
- 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.
TextCalendar
instances have the following methods:- formatday(theday,weekday,width)¶
Return a string representing a single day formatted with the givenwidth.Iftheday is
0
, 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 the
setfirstweekday()
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, where
0
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 the
setfirstweekday()
method.
- formatmonthname(theyear,themonth,width=0,withyear=True)¶
Return a string representing the month’s name centered within thespecifiedwidth. Ifwithyear is
True
, 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 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.
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 as
cssclasses
.Added in version 3.7.
- cssclass_month_head¶
The month’s head CSS class (used by
formatmonthname()
).The default value is"month"
.Added in version 3.7.
- cssclass_month¶
The CSS class for the whole month’s table (used by
formatmonth()
).The default value is"month"
.Added 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"
.Added 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"
.Added in version 3.7.
Note that although the naming for the above described class attributes issingular (e.g.
cssclass_month
cssclass_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
HTMLCalendar
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 of
TextCalendar
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 of
HTMLCalendar
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.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 (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 theTextCalendar
class.
- 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 theTextCalendar
class.
- calendar.timegm(tuple)¶
An unrelated but handy function that takes a time tuple such as returned bythe
gmtime()
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,where
MONDAY
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 as
MONDAY
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 and
month_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 and
month_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,where
JANUARY
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 as
JANUARY
throughDECEMBER
.Added in version 3.12.
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¶
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 specified
year
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 or
file:///
URL.