blob: d575228f7bf4069480c69946670bd7377c5f6b61 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001
2:mod:`calendar` --- General calendar-related functions
3======================================================
4
5.. module:: calendar
6 :synopsis: Functions for working with calendars, including some emulation of the Unix cal
7 program.
8.. sectionauthor:: Drew Csillag <drew_csillag@geocities.com>
9
10
11This module allows you to output calendars like the Unix :program:`cal` program,
12and provides additional useful functions related to the calendar. By default,
13these calendars have Monday as the first day of the week, and Sunday as the last
14(the European convention). Use :func:`setfirstweekday` to set the first day of
15the week to Sunday (6) or to any other weekday. Parameters that specify dates
16are given as integers. For related
17functionality, see also the :mod:`datetime` and :mod:`time` modules.
18
19Most of these functions and classses rely on the :mod:`datetime` module which
20uses an idealized calendar, the current Gregorian calendar indefinitely extended
21in both directions. This matches the definition of the "proleptic Gregorian"
22calendar in Dershowitz and Reingold's book "Calendrical Calculations", where
23it's the base calendar for all computations.
24
25
26.. class:: Calendar([firstweekday])
27
28 Creates a :class:`Calendar` object. *firstweekday* is an integer specifying the
29 first day of the week. ``0`` is Monday (the default), ``6`` is Sunday.
30
31 A :class:`Calendar` object provides several methods that can be used for
32 preparing the calendar data for formatting. This class doesn't do any formatting
33 itself. This is the job of subclasses.
34
Georg Brandl116aa622007-08-15 14:28:22 +000035
Benjamin Petersone41251e2008-04-25 01:59:09 +000036 :class:`Calendar` instances have the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +000037
Alexandre Vassalottibee32532008-05-16 18:15:12 +000038 .. method:: iterweekdays()
Georg Brandl116aa622007-08-15 14:28:22 +000039
Benjamin Petersone41251e2008-04-25 01:59:09 +000040 Return an iterator for the week day numbers that will be used for one
41 week. The first value from the iterator will be the same as the value of
42 the :attr:`firstweekday` property.
Georg Brandl116aa622007-08-15 14:28:22 +000043
44
Benjamin Petersone41251e2008-04-25 01:59:09 +000045 .. method:: itermonthdates(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000046
Benjamin Petersone41251e2008-04-25 01:59:09 +000047 Return an iterator for the month *month* (1-12) in the year *year*. This
48 iterator will return all days (as :class:`datetime.date` objects) for the
49 month and all days before the start of the month or after the end of the
50 month that are required to get a complete week.
Georg Brandl116aa622007-08-15 14:28:22 +000051
52
Benjamin Petersone41251e2008-04-25 01:59:09 +000053 .. method:: itermonthdays2(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000054
Benjamin Petersone41251e2008-04-25 01:59:09 +000055 Return an iterator for the month *month* in the year *year* similar to
56 :meth:`itermonthdates`. Days returned will be tuples consisting of a day
57 number and a week day number.
Georg Brandl116aa622007-08-15 14:28:22 +000058
59
Benjamin Petersone41251e2008-04-25 01:59:09 +000060 .. method:: itermonthdays(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000061
Benjamin Petersone41251e2008-04-25 01:59:09 +000062 Return an iterator for the month *month* in the year *year* similar to
63 :meth:`itermonthdates`. Days returned will simply be day numbers.
Georg Brandl116aa622007-08-15 14:28:22 +000064
65
Benjamin Petersone41251e2008-04-25 01:59:09 +000066 .. method:: monthdatescalendar(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000067
Benjamin Petersone41251e2008-04-25 01:59:09 +000068 Return a list of the weeks in the month *month* of the *year* as full
69 weeks. Weeks are lists of seven :class:`datetime.date` objects.
Georg Brandl116aa622007-08-15 14:28:22 +000070
71
Benjamin Petersone41251e2008-04-25 01:59:09 +000072 .. method:: monthdays2calendar(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000073
Benjamin Petersone41251e2008-04-25 01:59:09 +000074 Return a list of the weeks in the month *month* of the *year* as full
75 weeks. Weeks are lists of seven tuples of day numbers and weekday
76 numbers.
Georg Brandl116aa622007-08-15 14:28:22 +000077
78
Benjamin Petersone41251e2008-04-25 01:59:09 +000079 .. method:: monthdayscalendar(year, month)
Georg Brandl116aa622007-08-15 14:28:22 +000080
Benjamin Petersone41251e2008-04-25 01:59:09 +000081 Return a list of the weeks in the month *month* of the *year* as full
82 weeks. Weeks are lists of seven day numbers.
Georg Brandl116aa622007-08-15 14:28:22 +000083
84
Benjamin Petersone41251e2008-04-25 01:59:09 +000085 .. method:: yeardatescalendar(year[, width])
Georg Brandl116aa622007-08-15 14:28:22 +000086
Benjamin Petersone41251e2008-04-25 01:59:09 +000087 Return the data for the specified year ready for formatting. The return
88 value is a list of month rows. Each month row contains up to *width*
89 months (defaulting to 3). Each month contains between 4 and 6 weeks and
90 each week contains 1--7 days. Days are :class:`datetime.date` objects.
Georg Brandl116aa622007-08-15 14:28:22 +000091
92
Benjamin Petersone41251e2008-04-25 01:59:09 +000093 .. method:: yeardays2calendar(year[, width])
Georg Brandl116aa622007-08-15 14:28:22 +000094
Benjamin Petersone41251e2008-04-25 01:59:09 +000095 Return the data for the specified year ready for formatting (similar to
96 :meth:`yeardatescalendar`). Entries in the week lists are tuples of day
97 numbers and weekday numbers. Day numbers outside this month are zero.
Georg Brandl116aa622007-08-15 14:28:22 +000098
99
Benjamin Petersone41251e2008-04-25 01:59:09 +0000100 .. method:: yeardayscalendar(year[, width])
Georg Brandl116aa622007-08-15 14:28:22 +0000101
Benjamin Petersone41251e2008-04-25 01:59:09 +0000102 Return the data for the specified year ready for formatting (similar to
103 :meth:`yeardatescalendar`). Entries in the week lists are day numbers. Day
104 numbers outside this month are zero.
Georg Brandl116aa622007-08-15 14:28:22 +0000105
106
107.. class:: TextCalendar([firstweekday])
108
109 This class can be used to generate plain text calendars.
110
Georg Brandl116aa622007-08-15 14:28:22 +0000111
Benjamin Petersone41251e2008-04-25 01:59:09 +0000112 :class:`TextCalendar` instances have the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000113
Benjamin Petersone41251e2008-04-25 01:59:09 +0000114 .. method:: formatmonth(theyear, themonth[, w[, l]])
Georg Brandl116aa622007-08-15 14:28:22 +0000115
Benjamin Petersone41251e2008-04-25 01:59:09 +0000116 Return a month's calendar in a multi-line string. If *w* is provided, it
117 specifies the width of the date columns, which are centered. If *l* is
118 given, it specifies the number of lines that each week will use. Depends
119 on the first weekday as specified in the constructor or set by the
120 :meth:`setfirstweekday` method.
Georg Brandl116aa622007-08-15 14:28:22 +0000121
122
Benjamin Petersone41251e2008-04-25 01:59:09 +0000123 .. method:: prmonth(theyear, themonth[, w[, l]])
Georg Brandl116aa622007-08-15 14:28:22 +0000124
Benjamin Petersone41251e2008-04-25 01:59:09 +0000125 Print a month's calendar as returned by :meth:`formatmonth`.
Georg Brandl116aa622007-08-15 14:28:22 +0000126
127
Benjamin Petersone41251e2008-04-25 01:59:09 +0000128 .. method:: formatyear(theyear, themonth[, w[, l[, c[, m]]]])
Georg Brandl116aa622007-08-15 14:28:22 +0000129
Benjamin Petersone41251e2008-04-25 01:59:09 +0000130 Return a *m*-column calendar for an entire year as a multi-line string.
131 Optional parameters *w*, *l*, and *c* are for date column width, lines per
132 week, and number of spaces between month columns, respectively. Depends on
133 the first weekday as specified in the constructor or set by the
134 :meth:`setfirstweekday` method. The earliest year for which a calendar
135 can be generated is platform-dependent.
Georg Brandl116aa622007-08-15 14:28:22 +0000136
137
Benjamin Petersone41251e2008-04-25 01:59:09 +0000138 .. method:: pryear(theyear[, w[, l[, c[, m]]]])
Georg Brandl116aa622007-08-15 14:28:22 +0000139
Benjamin Petersone41251e2008-04-25 01:59:09 +0000140 Print the calendar for an entire year as returned by :meth:`formatyear`.
Georg Brandl116aa622007-08-15 14:28:22 +0000141
142
143.. class:: HTMLCalendar([firstweekday])
144
145 This class can be used to generate HTML calendars.
146
Georg Brandl116aa622007-08-15 14:28:22 +0000147
Benjamin Petersone41251e2008-04-25 01:59:09 +0000148 :class:`HTMLCalendar` instances have the following methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000149
Benjamin Petersone41251e2008-04-25 01:59:09 +0000150 .. method:: formatmonth(theyear, themonth[, withyear])
Georg Brandl116aa622007-08-15 14:28:22 +0000151
Benjamin Petersone41251e2008-04-25 01:59:09 +0000152 Return a month's calendar as an HTML table. If *withyear* is true the year
153 will be included in the header, otherwise just the month name will be
154 used.
Georg Brandl116aa622007-08-15 14:28:22 +0000155
156
Benjamin Petersone41251e2008-04-25 01:59:09 +0000157 .. method:: formatyear(theyear, themonth[, width])
Georg Brandl116aa622007-08-15 14:28:22 +0000158
Benjamin Petersone41251e2008-04-25 01:59:09 +0000159 Return a year's calendar as an HTML table. *width* (defaulting to 3)
160 specifies the number of months per row.
Georg Brandl116aa622007-08-15 14:28:22 +0000161
162
Benjamin Petersone41251e2008-04-25 01:59:09 +0000163 .. method:: formatyearpage(theyear[, width[, css[, encoding]]])
Georg Brandl116aa622007-08-15 14:28:22 +0000164
Benjamin Petersone41251e2008-04-25 01:59:09 +0000165 Return a year's calendar as a complete HTML page. *width* (defaulting to
166 3) specifies the number of months per row. *css* is the name for the
167 cascading style sheet to be used. :const:`None` can be passed if no style
168 sheet should be used. *encoding* specifies the encoding to be used for the
169 output (defaulting to the system default encoding).
Georg Brandl116aa622007-08-15 14:28:22 +0000170
171
172.. class:: LocaleTextCalendar([firstweekday[, locale]])
173
174 This subclass of :class:`TextCalendar` can be passed a locale name in the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000175 constructor and will return month and weekday names in the specified
176 locale. If this locale includes an encoding all strings containing month and
177 weekday names will be returned as unicode.
Georg Brandl116aa622007-08-15 14:28:22 +0000178
Georg Brandl116aa622007-08-15 14:28:22 +0000179
180.. class:: LocaleHTMLCalendar([firstweekday[, locale]])
181
182 This subclass of :class:`HTMLCalendar` can be passed a locale name in the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000183 constructor and will return month and weekday names in the specified
184 locale. If this locale includes an encoding all strings containing month and
185 weekday names will be returned as unicode.
Georg Brandl116aa622007-08-15 14:28:22 +0000186
Georg Brandl116aa622007-08-15 14:28:22 +0000187
188For simple text calendars this module provides the following functions.
189
Georg Brandl116aa622007-08-15 14:28:22 +0000190.. function:: setfirstweekday(weekday)
191
192 Sets the weekday (``0`` is Monday, ``6`` is Sunday) to start each week. The
193 values :const:`MONDAY`, :const:`TUESDAY`, :const:`WEDNESDAY`, :const:`THURSDAY`,
194 :const:`FRIDAY`, :const:`SATURDAY`, and :const:`SUNDAY` are provided for
195 convenience. For example, to set the first weekday to Sunday::
196
197 import calendar
198 calendar.setfirstweekday(calendar.SUNDAY)
199
Georg Brandl116aa622007-08-15 14:28:22 +0000200
201.. function:: firstweekday()
202
203 Returns the current setting for the weekday to start each week.
204
Georg Brandl116aa622007-08-15 14:28:22 +0000205
206.. function:: isleap(year)
207
208 Returns :const:`True` if *year* is a leap year, otherwise :const:`False`.
209
210
211.. function:: leapdays(y1, y2)
212
213 Returns the number of leap years in the range from *y1* to *y2* (exclusive),
214 where *y1* and *y2* are years.
215
Georg Brandl55ac8f02007-09-01 13:51:09 +0000216 This function works for ranges spanning a century change.
Georg Brandl116aa622007-08-15 14:28:22 +0000217
218
219.. function:: weekday(year, month, day)
220
221 Returns the day of the week (``0`` is Monday) for *year* (``1970``--...),
222 *month* (``1``--``12``), *day* (``1``--``31``).
223
224
225.. function:: weekheader(n)
226
227 Return a header containing abbreviated weekday names. *n* specifies the width in
228 characters for one weekday.
229
230
231.. function:: monthrange(year, month)
232
233 Returns weekday of first day of the month and number of days in month, for the
234 specified *year* and *month*.
235
236
237.. function:: monthcalendar(year, month)
238
239 Returns a matrix representing a month's calendar. Each row represents a week;
240 days outside of the month a represented by zeros. Each week begins with Monday
241 unless set by :func:`setfirstweekday`.
242
243
244.. function:: prmonth(theyear, themonth[, w[, l]])
245
246 Prints a month's calendar as returned by :func:`month`.
247
248
249.. function:: month(theyear, themonth[, w[, l]])
250
251 Returns a month's calendar in a multi-line string using the :meth:`formatmonth`
252 of the :class:`TextCalendar` class.
253
Georg Brandl116aa622007-08-15 14:28:22 +0000254
255.. function:: prcal(year[, w[, l[c]]])
256
257 Prints the calendar for an entire year as returned by :func:`calendar`.
258
259
260.. function:: calendar(year[, w[, l[c]]])
261
262 Returns a 3-column calendar for an entire year as a multi-line string using the
263 :meth:`formatyear` of the :class:`TextCalendar` class.
264
Georg Brandl116aa622007-08-15 14:28:22 +0000265
266.. function:: timegm(tuple)
267
268 An unrelated but handy function that takes a time tuple such as returned by the
269 :func:`gmtime` function in the :mod:`time` module, and returns the corresponding
270 Unix timestamp value, assuming an epoch of 1970, and the POSIX encoding. In
271 fact, :func:`time.gmtime` and :func:`timegm` are each others' inverse.
272
Georg Brandl116aa622007-08-15 14:28:22 +0000273
274The :mod:`calendar` module exports the following data attributes:
275
Georg Brandl116aa622007-08-15 14:28:22 +0000276.. data:: day_name
277
278 An array that represents the days of the week in the current locale.
279
280
281.. data:: day_abbr
282
283 An array that represents the abbreviated days of the week in the current locale.
284
285
286.. data:: month_name
287
288 An array that represents the months of the year in the current locale. This
289 follows normal convention of January being month number 1, so it has a length of
290 13 and ``month_name[0]`` is the empty string.
291
292
293.. data:: month_abbr
294
295 An array that represents the abbreviated months of the year in the current
296 locale. This follows normal convention of January being month number 1, so it
297 has a length of 13 and ``month_abbr[0]`` is the empty string.
298
299
300.. seealso::
301
302 Module :mod:`datetime`
303 Object-oriented interface to dates and times with similar functionality to the
304 :mod:`time` module.
305
306 Module :mod:`time`
307 Low-level time related functions.
308