In this guide, you'll explore Python's calendar module, which is used for managing dates and calendars. Learn its functions and examples for practical applications.
The calendar
module in Python provides functions and classes for working with dates and generating calendar-related data. It includes tools for formatting calendar dates as text, calculating the dates of holidays, and finding the weekday of a specific date.
Table of Contents
- Introduction
- Calendar Functions
calendar.calendar
calendar.month
calendar.isleap
calendar.leapdays
calendar.weekday
calendar.weekheader
calendar.monthrange
calendar.monthcalendar
calendar.timegm
calendar.HTMLCalendar
calendar.LocaleTextCalendar
- Examples
- Printing a Text Calendar
- Checking for Leap Year
- Finding Weekday of a Date
- Getting Month Range
- Generating a HTML Calendar
- Real-World Use Case
- Conclusion
- References
Introduction
The calendar
module allows you to generate and work with calendar data in Python. It provides functions to output calendars as text or HTML, calculate leap years, determine the day of the week for a given date, and more.
Calendar Functions
calendar.calendar
Returns a multi-line string with a calendar for an entire year.
import calendar
year_calendar = calendar.calendar(2024)
print(year_calendar)
Output:
2024
January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 1 2 3
8 9 10 11 12 13 14 5 6 7 8 9 10 11 4 5 6 7 8 9 10
15 16 17 18 19 20 21 12 13 14 15 16 17 18 11 12 13 14 15 16 17
22 23 24 25 26 27 28 19 20 21 22 23 24 25 18 19 20 21 22 23 24
29 30 31 26 27 28 29 25 26 27 28 29 30 31
April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 5 1 2
8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9
15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16
22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23
29 30 27 28 29 30 31 24 25 26 27 28 29 30
July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 1
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29
30
October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 1 2 3 1
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 31
calendar.month
Returns a multi-line string with a calendar for a month.
import calendar
month_calendar = calendar.month(2024, 7)
print(month_calendar)
Output:
July 2024
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
calendar.isleap
Returns True
if the year is a leap year, otherwise False
.
import calendar
print(calendar.isleap(2024))
Output:
True
calendar.leapdays
Returns the number of leap years in the range from y1
to y2
, exclusive.
import calendar
print(calendar.leapdays(2000, 2025))
Output:
7
calendar.weekday
Returns the day of the week (0 is Monday, 6 is Sunday) for a given date.
import calendar
print(calendar.weekday(2024, 7, 25))
Output:
3
calendar.weekheader
Returns a header string for the weekdays with the specified width.
import calendar
print(calendar.weekheader(2))
Output:
Mo Tu We Th Fr Sa Su
calendar.monthrange
Returns a tuple with the weekday of the first day of the month and the number of days in the month.
import calendar
print(calendar.monthrange(2024, 7))
Output:
(calendar.MONDAY, 31)
calendar.monthcalendar
Returns a matrix representing a month’s calendar. Each row represents a week.
import calendar
print(calendar.monthcalendar(2024, 7))
Output:
[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21], [22, 23, 24, 25, 26, 27, 28], [29, 30, 31, 0, 0, 0, 0]]
calendar.timegm
Converts a time tuple in UTC to seconds since the Epoch.
import calendar
import time
time_tuple = time.gmtime()
seconds_since_epoch = calendar.timegm(time_tuple)
print(seconds_since_epoch)
Output:
1722059135
calendar.HTMLCalendar
This class can be used to generate HTML calendars.
import calendar
html_cal = calendar.HTMLCalendar(calendar.SUNDAY)
html_calendar = html_cal.formatmonth(2024, 7)
print(html_calendar)
Output:
<table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">July 2024</th></tr>
<tr><th class="sun">Sun</th><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th></tr>
<tr><td class="noday"> </td><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td></tr>
<tr><td class="sun">7</td><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td></tr>
<tr><td class="sun">14</td><td class="mon">15</td><td class="tue">16</td><td class="wed">17</td><td class="thu">18</td><td class="fri">19</td><td class="sat">20</td></tr>
<tr><td class="sun">21</td><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td></tr>
<tr><td class="sun">28</td><td class="mon">29</td><td class="tue">30</td><td class="wed">31</td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td></tr>
</table>
calendar.LocaleTextCalendar
This class allows you to generate text calendars using a specific locale.
import calendar
import locale
locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
locale_cal = calendar.LocaleTextCalendar(calendar.SUNDAY, 'en_US.UTF-8')
locale_calendar = locale_cal.formatmonth(2024, 7)
print(locale_calendar)
Output:
July 2024
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Examples
Printing a Text Calendar
Print a text calendar for the year 2024.
import calendar
year_calendar = calendar.calendar(2024)
print(year_calendar)
Output:
2024
January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 1 2 3
8 9 10 11 12 13 14 5 6 7 8 9 10 11 4 5 6 7 8 9 10
15 16 17 18 19 20 21 12 13 14 15 16 17 18 11 12 13 14 15 16 17
22 23 24 25 26 27 28 19 20 21 22 23 24 25 18 19 20 21 22 23 24
29 30 31 26 27 28 29 25 26 27 28 29 30 31
April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 5 1 2
8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9
15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16
22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23
29 30 27 28 29 30 31 24 25 26 27 28 29 30
July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 1
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29
30
October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 1 2 3 1
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 31
Checking for Leap Year
Check if 2024 is a leap year.
import calendar
is_leap = calendar.isleap(2024)
print(f"Is 2024 a leap year? {is_leap}")
Output:
Is 2024 a leap year? True
Finding the Weekday of a Date
Find the weekday of July 25, 2024.
import calendar
weekday = calendar.weekday(2024, 7, 25)
print(f"The weekday of July 25, 2024 is {calendar.day_name[weekday]}")
Output:
The weekday of July 25, 2024 is Thursday
Getting Month Range
Get the weekday of the first day and the number of days in July 2024.
import calendar
first_day, num_days = calendar.monthrange(2024, 7)
print(f"First day: {calendar.day_name[first_day]}, Number of days: {num_days}")
Output:
First day: Monday, Number of days: 31
Generating an HTML Calendar
Generate an HTML calendar for July 2024.
import calendar
html_cal = calendar.HTMLCalendar(calendar.SUNDAY)
html_calendar = html_cal.formatmonth(2024, 7)
print(html_calendar)
Output:
<table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">July 2024</th></tr>
<tr><th class="sun">Sun</th><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th></tr>
<tr><td class="noday"> </td><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td></tr>
<tr><td class="sun">7</td><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td></tr>
<tr><td class="sun">14</td><td class="mon">15</td><td class="tue">16</td><td class="wed">17</td><td class="thu">18</td><td class="fri">19</td><td class="sat">20</td></tr>
<tr><td class="sun">21</td><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td></tr>
<tr><td class="sun">28</td><td class="mon">29</td><td class="tue">30</td><td class="wed">31</td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td></tr>
</table>
Real-World Use Case
Scheduling Events
Suppose you are developing a web application that allows users to schedule events. You can use the calendar
module to generate a monthly calendar and highlight the days with scheduled events.
import calendar
from datetime import datetime
def highlight_events(year, month, events):
cal = calendar.HTMLCalendar(calendar.SUNDAY)
month_calendar = cal.formatmonth(year, month)
for event_date in events:
event_str = f'<b>{event_date.day}</b>'
month_calendar = month_calendar.replace(f'>{event_date.day}<', f'>{event_str}<')
return month_calendar
events = [datetime(2024, 7, 10), datetime(2024, 7, 20), datetime(2024, 7, 25)]
html_calendar = highlight_events(2024, 7, events)
print(html_calendar)
Output:
<table border="0" cellpadding="0" cellspacing="0" class="month">
<tr><th colspan="7" class="month">July 2024</th></tr>
<tr><th class="sun">Sun</th><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th></tr>
<tr><td class="noday"> </td><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td></tr>
<tr><td class="sun">7</td><td class="mon">8</td><td class="tue">9</td><td class="wed"><b>10</b></td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td></tr>
<tr><td class="sun">14</td><td class="mon">15</td><td class="tue">16</td><td class="wed">17</td><td class="thu">18</td><td class="fri">19</td><td class="sat"><b>20</b></td></tr>
<tr><td class="sun">21</td><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu"><b>25</b></td><td class="fri">26</td><td class="sat">27</td></tr>
<tr><td class="sun">28</td><td class="mon">29</td><td class="tue">30</td><td class="wed">31</td><td class="noday"> </td><td class="noday"> </td><td class="noday"> </td></tr>
</table>
Conclusion
The calendar
module in Python provides a comprehensive set of tools for working with dates and generating calendars. Whether you need to check for leap years, find the weekday of a specific date, generate text or HTML calendars, or manage locale-specific calendars, the calendar
module has you covered. By leveraging these capabilities, you can effectively manage and display calendar data in your applications.
Comments
Post a Comment
Leave Comment