\section{\module{calendar} ---
         General calendar-related functions}

\declaremodule{standard}{calendar}
\modulesynopsis{Functions for working with calendars,
                including some emulation of the \UNIX\ \program{cal}
                program.}
\sectionauthor{Drew Csillag}{drew_csillag@geocities.com}

This module allows you to output calendars like the \UNIX{}
\program{cal} 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). Use \function{setfirstweekday()} to set the first day of the
week to Sunday (6) or to any other weekday.  Parameters that specify
dates are given as integers.

\begin{funcdesc}{setfirstweekday}{weekday}
Sets the weekday (\code{0} is Monday, \code{6} is Sunday) to start
each week. The values \constant{MONDAY}, \constant{TUESDAY},
\constant{WEDNESDAY}, \constant{THURSDAY}, \constant{FRIDAY},
\constant{SATURDAY}, and \constant{SUNDAY} are provided for
convenience. For example, to set the first weekday to Sunday:

\begin{verbatim}
import calendar
calendar.setfirstweekday(calendar.SUNDAY)
\end{verbatim}
\end{funcdesc}

\begin{funcdesc}{firstweekday}{}
Returns the current setting for the weekday to start each week.
\end{funcdesc}

\begin{funcdesc}{isleap}{year}
Returns \code{1} if \var{year} is a leap year, otherwise \code{0}.
\end{funcdesc}

\begin{funcdesc}{leapdays}{y1, y2}
Returns the number of leap years in the range
[\var{y1}\ldots\var{y2}), where \var{y1} and \var{y2} are years.
\end{funcdesc}

\begin{funcdesc}{weekday}{year, month, day}
Returns the day of the week (\code{0} is Monday) for \var{year}
(\code{1970}--\ldots), \var{month} (\code{1}--\code{12}), \var{day}
(\code{1}--\code{31}).
\end{funcdesc}

\begin{funcdesc}{monthrange}{year, month}
Returns weekday of first day of the month and number of days in month, 
for the specified \var{year} and \var{month}.
\end{funcdesc}

\begin{funcdesc}{monthcalendar}{year, month}
Returns a matrix representing a month's calendar.  Each row represents
a week; days outside of the month a represented by zeros.
Each week begins with Monday unless set by \function{setfirstweekday()}.
\end{funcdesc}

\begin{funcdesc}{prmonth}{theyear, themonth\optional{, w\optional{, l}}}
Prints a month's calendar as returned by \function{month()}.
\end{funcdesc}

\begin{funcdesc}{month}{theyear, themonth\optional{, w\optional{, l}}}
Returns a month's calendar in a multi-line string. If \var{w} is
provided, it specifies the width of the date columns, which are
centered. If \var{l} is given, it specifies the number of lines that
each week will use. Depends on the first weekday as set by
\function{setfirstweekday()}.
\end{funcdesc}

\begin{funcdesc}{prcal}{year\optional{, w\optional{, l\optional{c}}}}
Prints the calendar for an entire year as returned by 
\function{calendar()}.
\end{funcdesc}

\begin{funcdesc}{calendar}{year\optional{, w\optional{, l\optional{c}}}}
Returns a 3-column calendar for an entire year as a multi-line string.
Optional parameters \var{w}, \var{l}, and \var{c} are for date column
width, lines per week, and number of spaces between month columns,
respectively. Depends on the first weekday as set by
\function{setfirstweekday()}.  The earliest year for which a calendar can
be generated is platform-dependent.
\end{funcdesc}

\begin{funcdesc}{timegm}{tuple}
An unrelated but handy function that takes a time tuple such as
returned by the \function{gmtime()} function in the \refmodule{time}
module, and returns the corresponding \UNIX{} timestamp value, assuming
an epoch of 1970, and the POSIX encoding.  In fact,
\function{time.gmtime()} and \function{timegm()} are each others' inverse.
\end{funcdesc}


\begin{seealso}
  \seemodule{time}{Low-level time related functions.}
\end{seealso}
