blob: 2e03946fd99242327b0b1a8495bd9a33ab2be374 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`calendar` --- General calendar-related functions
2======================================================
3
4.. module:: calendar
Georg Brandl0d8f0732009-04-05 22:20:44 +00005 :synopsis: Functions for working with calendars, including some emulation
6 of the Unix cal program.
Georg Brandl116aa622007-08-15 14:28:22 +00007.. sectionauthor:: Drew Csillag <drew_csillag@geocities.com>
8
9
10This module allows you to output calendars like the Unix :program:`cal` program,
11and provides additional useful functions related to the calendar. By default,
12these calendars have Monday as the first day of the week, and Sunday as the last
13(the European convention). Use :func:`setfirstweekday` to set the first day of
14the week to Sunday (6) or to any other weekday. Parameters that specify dates
15are given as integers. For related
16functionality, see also the :mod:`datetime` and :mod:`time` modules.
17
Benjamin Petersond7c3ed52010-06-27 22:32:30 +000018Most of these functions and classes rely on the :mod:`datetime` module which
Alexander Belopolskyd4bbab22010-11-22 03:06:56 +000019uses an idealized calendar, the current Gregorian calendar extended
Georg Brandl116aa622007-08-15 14:28:22 +000020in both directions. This matches the definition of the "proleptic Gregorian"
21calendar in Dershowitz and Reingold's book "Calendrical Calculations", where
22it's the base calendar for all computations.
23
Éric Araujo6e6cb8e2010-11-16 19:13:50 +000024.. seealso::
25
26 Latest version of the :source:`calendar module Python source code
27 <Lib/calendar.py>`
Georg Brandl116aa622007-08-15 14:28:22 +000028
Georg Brandl0d8f0732009-04-05 22:20:44 +000029.. class:: Calendar(firstweekday=0)
Georg Brandl116aa622007-08-15 14:28:22 +000030
31 Creates a :class:`Calendar` object. *firstweekday* is an integer specifying the
32 first day of the week. ``0`` is Monday (the default), ``6`` is Sunday.
33
34 A :class:`Calendar` object provides several methods that can be used for
35 preparing the calendar data for formatting. This class doesn't do any formatting
36 itself. This is the job of subclasses.
37
Georg Brandl116aa622007-08-15 14:28:22 +000038
Benjamin Petersone41251e2008-04-25 01:59:09 +000039 :class:`Calendar` instances have the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +000040
Alexandre Vassalottibee32532008-05-16 18:15:12 +000041 .. method:: iterweekdays()
Georg Brandl116aa622007-08-15 14:28:22 +000042
Benjamin Petersone41251e2008-04-25 01:59:09 +000043 Return an iterator for the week day numbers that will be used for one
44 week. The first value from the iterator will be the same as the value of
45 the :attr:`firstweekday` property.
Georg Brandl116aa622007-08-15 14:28:22 +000046
47
Benjamin Petersone41251e2008-04-25 01:59:09 +000048 .. method:: itermonthdates(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000049
Benjamin Petersone41251e2008-04-25 01:59:09 +000050 Return an iterator for the month *month* (1-12) in the year *year*. This
51 iterator will return all days (as :class:`datetime.date` objects) for the
52 month and all days before the start of the month or after the end of the
53 month that are required to get a complete week.
Georg Brandl116aa622007-08-15 14:28:22 +000054
55
Benjamin Petersone41251e2008-04-25 01:59:09 +000056 .. method:: itermonthdays2(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000057
Benjamin Petersone41251e2008-04-25 01:59:09 +000058 Return an iterator for the month *month* in the year *year* similar to
59 :meth:`itermonthdates`. Days returned will be tuples consisting of a day
60 number and a week day number.
Georg Brandl116aa622007-08-15 14:28:22 +000061
62
Benjamin Petersone41251e2008-04-25 01:59:09 +000063 .. method:: itermonthdays(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000064
Benjamin Petersone41251e2008-04-25 01:59:09 +000065 Return an iterator for the month *month* in the year *year* similar to
66 :meth:`itermonthdates`. Days returned will simply be day numbers.
Georg Brandl116aa622007-08-15 14:28:22 +000067
68
Benjamin Petersone41251e2008-04-25 01:59:09 +000069 .. method:: monthdatescalendar(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000070
Benjamin Petersone41251e2008-04-25 01:59:09 +000071 Return a list of the weeks in the month *month* of the *year* as full
72 weeks. Weeks are lists of seven :class:`datetime.date` objects.
Georg Brandl116aa622007-08-15 14:28:22 +000073
74
Benjamin Petersone41251e2008-04-25 01:59:09 +000075 .. method:: monthdays2calendar(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000076
Benjamin Petersone41251e2008-04-25 01:59:09 +000077 Return a list of the weeks in the month *month* of the *year* as full
78 weeks. Weeks are lists of seven tuples of day numbers and weekday
79 numbers.
Georg Brandl116aa622007-08-15 14:28:22 +000080
81
Benjamin Petersone41251e2008-04-25 01:59:09 +000082 .. method:: monthdayscalendar(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000083
Benjamin Petersone41251e2008-04-25 01:59:09 +000084 Return a list of the weeks in the month *month* of the *year* as full
85 weeks. Weeks are lists of seven day numbers.
Georg Brandl116aa622007-08-15 14:28:22 +000086
87
Georg Brandl0d8f0732009-04-05 22:20:44 +000088 .. method:: yeardatescalendar(year, width=3)
Georg Brandl116aa622007-08-15 14:28:22 +000089
Benjamin Petersone41251e2008-04-25 01:59:09 +000090 Return the data for the specified year ready for formatting. The return
91 value is a list of month rows. Each month row contains up to *width*
92 months (defaulting to 3). Each month contains between 4 and 6 weeks and
93 each week contains 1--7 days. Days are :class:`datetime.date` objects.
Georg Brandl116aa622007-08-15 14:28:22 +000094
95
Georg Brandl0d8f0732009-04-05 22:20:44 +000096 .. method:: yeardays2calendar(year, width=3)
Georg Brandl116aa622007-08-15 14:28:22 +000097
Benjamin Petersone41251e2008-04-25 01:59:09 +000098 Return the data for the specified year ready for formatting (similar to
99 :meth:`yeardatescalendar`). Entries in the week lists are tuples of day
100 numbers and weekday numbers. Day numbers outside this month are zero.
Georg Brandl116aa622007-08-15 14:28:22 +0000101
102
Georg Brandl0d8f0732009-04-05 22:20:44 +0000103 .. method:: yeardayscalendar(year, width=3)
Georg Brandl116aa622007-08-15 14:28:22 +0000104
Benjamin Petersone41251e2008-04-25 01:59:09 +0000105 Return the data for the specified year ready for formatting (similar to
106 :meth:`yeardatescalendar`). Entries in the week lists are day numbers. Day
107 numbers outside this month are zero.
Georg Brandl116aa622007-08-15 14:28:22 +0000108
109
Georg Brandl0d8f0732009-04-05 22:20:44 +0000110.. class:: TextCalendar(firstweekday=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000111
112 This class can be used to generate plain text calendars.
113
Benjamin Petersone41251e2008-04-25 01:59:09 +0000114 :class:`TextCalendar` instances have the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000115
Georg Brandl0d8f0732009-04-05 22:20:44 +0000116 .. method:: formatmonth(theyear, themonth, w=0, l=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000117
Benjamin Petersone41251e2008-04-25 01:59:09 +0000118 Return a month's calendar in a multi-line string. If *w* is provided, it
119 specifies the width of the date columns, which are centered. If *l* is
120 given, it specifies the number of lines that each week will use. Depends
121 on the first weekday as specified in the constructor or set by the
122 :meth:`setfirstweekday` method.
Georg Brandl116aa622007-08-15 14:28:22 +0000123
124
Georg Brandl0d8f0732009-04-05 22:20:44 +0000125 .. method:: prmonth(theyear, themonth, w=0, l=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000126
Benjamin Petersone41251e2008-04-25 01:59:09 +0000127 Print a month's calendar as returned by :meth:`formatmonth`.
Georg Brandl116aa622007-08-15 14:28:22 +0000128
129
Benjamin Peterson20211002009-11-25 18:34:42 +0000130 .. method:: formatyear(theyear, w=2, l=1, c=6, m=3)
Georg Brandl116aa622007-08-15 14:28:22 +0000131
Benjamin Petersone41251e2008-04-25 01:59:09 +0000132 Return a *m*-column calendar for an entire year as a multi-line string.
133 Optional parameters *w*, *l*, and *c* are for date column width, lines per
134 week, and number of spaces between month columns, respectively. Depends on
135 the first weekday as specified in the constructor or set by the
136 :meth:`setfirstweekday` method. The earliest year for which a calendar
137 can be generated is platform-dependent.
Georg Brandl116aa622007-08-15 14:28:22 +0000138
139
Georg Brandl0d8f0732009-04-05 22:20:44 +0000140 .. method:: pryear(theyear, w=2, l=1, c=6, m=3)
Georg Brandl116aa622007-08-15 14:28:22 +0000141
Benjamin Petersone41251e2008-04-25 01:59:09 +0000142 Print the calendar for an entire year as returned by :meth:`formatyear`.
Georg Brandl116aa622007-08-15 14:28:22 +0000143
144
Georg Brandl0d8f0732009-04-05 22:20:44 +0000145.. class:: HTMLCalendar(firstweekday=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000146
147 This class can be used to generate HTML calendars.
148
Georg Brandl116aa622007-08-15 14:28:22 +0000149
Benjamin Petersone41251e2008-04-25 01:59:09 +0000150 :class:`HTMLCalendar` instances have the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000151
Georg Brandl0d8f0732009-04-05 22:20:44 +0000152 .. method:: formatmonth(theyear, themonth, withyear=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000153
Benjamin Petersone41251e2008-04-25 01:59:09 +0000154 Return a month's calendar as an HTML table. If *withyear* is true the year
155 will be included in the header, otherwise just the month name will be
156 used.
Georg Brandl116aa622007-08-15 14:28:22 +0000157
158
Benjamin Peterson20211002009-11-25 18:34:42 +0000159 .. method:: formatyear(theyear, width=3)
Georg Brandl116aa622007-08-15 14:28:22 +0000160
Benjamin Petersone41251e2008-04-25 01:59:09 +0000161 Return a year's calendar as an HTML table. *width* (defaulting to 3)
162 specifies the number of months per row.
Georg Brandl116aa622007-08-15 14:28:22 +0000163
164
Georg Brandl0d8f0732009-04-05 22:20:44 +0000165 .. method:: formatyearpage(theyear, width=3, css='calendar.css', encoding=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000166
Benjamin Petersone41251e2008-04-25 01:59:09 +0000167 Return a year's calendar as a complete HTML page. *width* (defaulting to
168 3) specifies the number of months per row. *css* is the name for the
169 cascading style sheet to be used. :const:`None` can be passed if no style
170 sheet should be used. *encoding* specifies the encoding to be used for the
171 output (defaulting to the system default encoding).
Georg Brandl116aa622007-08-15 14:28:22 +0000172
173
Georg Brandl0d8f0732009-04-05 22:20:44 +0000174.. class:: LocaleTextCalendar(firstweekday=0, locale=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000175
176 This subclass of :class:`TextCalendar` can be passed a locale name in the
Georg Brandl7004bd12010-10-19 18:54:25 +0000177 constructor and will return month and weekday names in the specified locale.
178 If this locale includes an encoding all strings containing month and weekday
179 names will be returned as unicode.
Georg Brandl116aa622007-08-15 14:28:22 +0000180
Georg Brandl116aa622007-08-15 14:28:22 +0000181
Georg Brandl0d8f0732009-04-05 22:20:44 +0000182.. class:: LocaleHTMLCalendar(firstweekday=0, locale=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000183
184 This subclass of :class:`HTMLCalendar` can be passed a locale name in the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000185 constructor and will return month and weekday names in the specified
186 locale. If this locale includes an encoding all strings containing month and
187 weekday names will be returned as unicode.
Georg Brandl116aa622007-08-15 14:28:22 +0000188
Georg Brandl7004bd12010-10-19 18:54:25 +0000189.. note::
190
191 The :meth:`formatweekday` and :meth:`formatmonthname` methods of these two
192 classes temporarily change the current locale to the given *locale*. Because
193 the current locale is a process-wide setting, they are not thread-safe.
194
Georg Brandl116aa622007-08-15 14:28:22 +0000195
196For simple text calendars this module provides the following functions.
197
Georg Brandl116aa622007-08-15 14:28:22 +0000198.. function:: setfirstweekday(weekday)
199
200 Sets the weekday (``0`` is Monday, ``6`` is Sunday) to start each week. The
201 values :const:`MONDAY`, :const:`TUESDAY`, :const:`WEDNESDAY`, :const:`THURSDAY`,
202 :const:`FRIDAY`, :const:`SATURDAY`, and :const:`SUNDAY` are provided for
203 convenience. For example, to set the first weekday to Sunday::
204
205 import calendar
206 calendar.setfirstweekday(calendar.SUNDAY)
207
Georg Brandl116aa622007-08-15 14:28:22 +0000208
209.. function:: firstweekday()
210
211 Returns the current setting for the weekday to start each week.
212
Georg Brandl116aa622007-08-15 14:28:22 +0000213
214.. function:: isleap(year)
215
216 Returns :const:`True` if *year* is a leap year, otherwise :const:`False`.
217
218
219.. function:: leapdays(y1, y2)
220
221 Returns the number of leap years in the range from *y1* to *y2* (exclusive),
222 where *y1* and *y2* are years.
223
Georg Brandl55ac8f02007-09-01 13:51:09 +0000224 This function works for ranges spanning a century change.
Georg Brandl116aa622007-08-15 14:28:22 +0000225
226
227.. function:: weekday(year, month, day)
228
229 Returns the day of the week (``0`` is Monday) for *year* (``1970``--...),
230 *month* (``1``--``12``), *day* (``1``--``31``).
231
232
233.. function:: weekheader(n)
234
235 Return a header containing abbreviated weekday names. *n* specifies the width in
236 characters for one weekday.
237
238
239.. function:: monthrange(year, month)
240
241 Returns weekday of first day of the month and number of days in month, for the
242 specified *year* and *month*.
243
244
245.. function:: monthcalendar(year, month)
246
247 Returns a matrix representing a month's calendar. Each row represents a week;
248 days outside of the month a represented by zeros. Each week begins with Monday
249 unless set by :func:`setfirstweekday`.
250
251
Georg Brandl0d8f0732009-04-05 22:20:44 +0000252.. function:: prmonth(theyear, themonth, w=0, l=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000253
254 Prints a month's calendar as returned by :func:`month`.
255
256
Georg Brandl0d8f0732009-04-05 22:20:44 +0000257.. function:: month(theyear, themonth, w=0, l=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000258
259 Returns a month's calendar in a multi-line string using the :meth:`formatmonth`
260 of the :class:`TextCalendar` class.
261
Georg Brandl116aa622007-08-15 14:28:22 +0000262
Georg Brandl0d8f0732009-04-05 22:20:44 +0000263.. function:: prcal(year, w=0, l=0, c=6, m=3)
Georg Brandl116aa622007-08-15 14:28:22 +0000264
265 Prints the calendar for an entire year as returned by :func:`calendar`.
266
267
Georg Brandl0d8f0732009-04-05 22:20:44 +0000268.. function:: calendar(year, w=2, l=1, c=6, m=3)
Georg Brandl116aa622007-08-15 14:28:22 +0000269
Georg Brandl0d8f0732009-04-05 22:20:44 +0000270 Returns a 3-column calendar for an entire year as a multi-line string using
271 the :meth:`formatyear` of the :class:`TextCalendar` class.
Georg Brandl116aa622007-08-15 14:28:22 +0000272
Georg Brandl116aa622007-08-15 14:28:22 +0000273
274.. function:: timegm(tuple)
275
276 An unrelated but handy function that takes a time tuple such as returned by the
277 :func:`gmtime` function in the :mod:`time` module, and returns the corresponding
278 Unix timestamp value, assuming an epoch of 1970, and the POSIX encoding. In
279 fact, :func:`time.gmtime` and :func:`timegm` are each others' inverse.
280
Georg Brandl116aa622007-08-15 14:28:22 +0000281
282The :mod:`calendar` module exports the following data attributes:
283
Georg Brandl116aa622007-08-15 14:28:22 +0000284.. data:: day_name
285
286 An array that represents the days of the week in the current locale.
287
288
289.. data:: day_abbr
290
291 An array that represents the abbreviated days of the week in the current locale.
292
293
294.. data:: month_name
295
296 An array that represents the months of the year in the current locale. This
297 follows normal convention of January being month number 1, so it has a length of
298 13 and ``month_name[0]`` is the empty string.
299
300
301.. data:: month_abbr
302
303 An array that represents the abbreviated months of the year in the current
304 locale. This follows normal convention of January being month number 1, so it
305 has a length of 13 and ``month_abbr[0]`` is the empty string.
306
307
308.. seealso::
309
310 Module :mod:`datetime`
311 Object-oriented interface to dates and times with similar functionality to the
312 :mod:`time` module.
313
314 Module :mod:`time`
315 Low-level time related functions.
316