
Picture by Creator | ChatGPT
Introduction
Python’s built-in datetime
module can simply be thought-about the go-to library for dealing with date and time formatting and manipulation within the ecosystem. Most Python coders are aware of creating datetime
objects, formatting them into strings, and performing primary arithmetic. Nonetheless, this highly effective module, generally alongside associated libraries corresponding to calendar
, presents a ton extra performance past the fundamentals that may clear up complicated date and time-related issues with stunning ease.
This text appears at 10 helpful — and maybe stunning — issues you’ll be able to accomplish with Python’s datetime
module. From navigating timezones to calculating particular weekday occurrences, these examples will reveal the flexibility of Python’s date and time toolkit.
1. Discovering the Day of the Week
Past simply understanding the date, you typically must know the day of the week. The datetime
module makes this trivial. Each datetime
object has a weekday()
methodology, which returns the day of the week as an integer (Monday is 0, Sunday is 6), and a strftime()
methodology, which may format the date to indicate the complete day identify.
import datetime
# Decide a date
right this moment = datetime.date(2025, 7, 10)
# Get the day of the week (Monday is 0)
day_of_week_num = right this moment.weekday()
print(f"Day of the week (numeric): {day_of_week_num}")
# Get the complete identify of the day
day_name = some_date.strftime("%A")
print(f"The date {right this moment} is a {day_name}")
Output:
The date 2025-07-10 is a Thursday
2. Calculating the Time Till a Future Occasion
Ever wanted a easy countdown timer? With datetime
, you’ll be able to simply calculate the time remaining till a particular future date and time. By subtracting the present datetime
from a future one, you get a timedelta
object that represents the distinction.
import datetime
# Outline a future occasion
new_year_2050 = datetime.datetime(2050, 1, 1, 0, 0, 0)
# Get the present time
now = datetime.datetime.now()
# Calculate the distinction
time_left = new_year_2050 - now
print(f"Time left till New Yr 2050: {time_left}")
Output:
Time left till New Yr 2050: 8940 days, 16:05:52.120836
3. Working with Timezones
Dealing with timezones is hard. A naive datetime
object has no timezone knowledge, whereas an conscious object does possess this knowledge. Utilizing the pytz
library (or the built-in zoneinfo
in Python 3.9+) makes working with timezones manageable.
For example, you should use one timezone’s time as a base for conversion to a different timezone like this:
import datetime
from pytz import timezone
# Create a timezone-aware datetime for New York
nyc_tz = timezone('America/New_York')
nyc_time = datetime.datetime.now(nyc_tz)
print(f"New York Time: {nyc_time}")
# Convert it to a different timezone
london_tz = timezone('Europe/London')
london_time = nyc_time.astimezone(london_tz)
print(f"London Time: {london_time}")
Output:
New York Time: 2025-07-10 07:57:53.900220-04:00
London Time: 2025-07-10 12:57:53.900220+01:00
4. Getting the Final Day of a Month
Determining the final day of a month isn’t simple since months have completely different numbers of days. You might write logic to deal with 30/31 days together with February (remember about leap years!), or you could possibly use a intelligent trick with datetime
and timedelta
. The technique is to search out the primary day of the subsequent month after which subtract sooner or later.
import datetime
def get_last_day_of_month(12 months, month):
# Deal with month rollover for December -> January
if month == 12:
next_month_first_day = datetime.date(12 months + 1, 1, 1)
else:
next_month_first_day = datetime.date(12 months, month + 1, 1)
# Subtract sooner or later to get the final day of the present month
return next_month_first_day - datetime.timedelta(days=1)
# Instance: Get the final day of February 2024 (a bissextile year)
last_day = get_last_day_of_month(2024, 2)
print(f"The final day of February 2024 is: {last_day}")
Output:
The final day of February 2024 is: 2024-02-29
5. Calculating Your Exact Age
You need to use datetime
to calculate somebody’s age all the way down to the day. The logic entails subtracting the birthdate from the present date after which performing a small adjustment to account for whether or not the individual’s birthday has occurred but this 12 months.
import datetime
def calculate_age(birthdate):
right this moment = datetime.date.right this moment()
age = right this moment.12 months - birthdate.12 months - ((right this moment.month, right this moment.day) < (birthdate.month, birthdate.day))
return age
# Instance utilization
picasso_birthdate = datetime.date(1881, 10, 25)
picasso_age = calculate_age(picasso_birthdate)
print(f"If alive right this moment, Pablo Picasso could be {picasso_age} years outdated.")
Output:
If alive right this moment, Pablo Picasso could be 143 years outdated.
6. Iterating By a Vary of Dates
Generally it’s essential carry out an operation for on daily basis inside a particular date vary. You possibly can simply loop by means of dates by beginning with a date object and repeatedly including a timedelta
of sooner or later till you attain the top date.
import datetime
start_date = datetime.date(2025, 1, 1)
end_date = datetime.date(2025, 1, 7)
day_delta = datetime.timedelta(days=1)
current_date = start_date
whereas current_date <= end_date:
print(current_date.strftime('%Y-%m-%d, %A'))
current_date += day_delta
Output:
2025-01-01, Wednesday
2025-01-02, Thursday
2025-01-03, Friday
2025-01-04, Saturday
2025-01-05, Sunday
2025-01-06, Monday
2025-01-07, Tuesday
7. Parsing Dates from Non-Customary String Codecs
The strptime()
perform is beneficial for changing strings to datetime
objects. It’s extremely versatile and might deal with all kinds of codecs through the use of particular format codes. That is important when coping with knowledge from completely different sources that will not use a regular ISO format.
import datetime
date_string_1 = "July 4, 1776"
date_string_2 = "1867-07-01 14:30:00"
# Parse the primary string format
dt_object_1 = datetime.datetime.strptime(date_string_1, "%B %d, %Y")
print(f"Parsed object 1: {dt_object_1}")
# Parse the second string format
dt_object_2 = datetime.datetime.strptime(date_string_2, "%Y-%m-%d %H:%M:%S")
print(f"Parsed object 2: {dt_object_2}")
Output:
Parsed object 1: 1776-07-04 00:00:00
Parsed object 2: 1867-07-01 14:30:00
8. Discovering the Nth Weekday of a Month
Do you wish to know the date of the third Thursday in November? The calendar
module can be utilized alongside datetime
to unravel this. The monthcalendar()
perform returns a matrix representing the weeks of a month, which you’ll be able to then parse.
import calendar
# calendar.weekday() Monday is 0 and Sunday is 6
# calendar.Thursday is 3
cal = calendar.Calendar()
# Get a matrix of weeks for November 2025
month_matrix = cal.monthdatescalendar(2025, 11)
# Discover the third Thursday
third_thursday = [week[calendar.THURSDAY] for week in month_matrix if week[calendar.THURSDAY].month == 11][2]
print(f"The third Thursday of Nov 2025 is: {third_thursday}")
Output:
The third Thursday of Nov 2025 is: 2025-11-20
9. Getting the ISO Week Quantity
The ISO 8601 normal defines a system for week numbering the place per week begins on a Monday. The isocalendar()
methodology returns a tuple containing the ISO 12 months, week quantity, and weekday for a given date.
Observe that the date beneath is a Thursday, and so ought to end in a day of the week of 4. It also needs to be the twenty eighth week of the 12 months.
import datetime
d = datetime.date(2025, 7, 10)
iso_cal = d.isocalendar()
print(f"Date: {d}")
print(f"ISO Yr: {iso_cal[0]}")
print(f"ISO Week Quantity: {iso_cal[1]}")
print(f"ISO Weekday: {iso_cal[2]}")
Output:
Date: 2025-07-10
ISO Yr: 2025
ISO Week Quantity: 28
ISO Weekday: 4
10. Including or Subtracting Enterprise Days
Calculating future dates whereas skipping weekends is a typical enterprise requirement. Whereas datetime
does not have a built-in perform for this, you’ll be able to write a easy helper perform utilizing timedelta
and the weekday()
methodology.
import datetime
def add_business_days(start_date, num_days):
current_date = start_date
whereas num_days > 0:
current_date += datetime.timedelta(days=1)
# weekday() returns 5 for Saturday and 6 for Sunday
if current_date.weekday() < 5:
num_days -= 1
return current_date
begin = datetime.date(2025, 7, 10) # A Thursday
finish = add_business_days(begin, 13)
print(f"13 enterprise days after {begin} is {finish}")
13 enterprise days after 2025-07-10 is 2025-07-29
Wrapping Up
Python’s datetime
module is greater than only a easy device for storing dates. It supplies a versatile and helpful set of instruments for dealing with nearly any time-related logic possible. By understanding its core elements — date
, time
, datetime
, and timedelta
— and mixing them with the calendar
module or exterior libraries like pytz
, you’ll be able to clear up complicated real-world issues effectively and precisely.
Do not forget to take a look at the datetime
module’s documentation for extra. You is perhaps shocked at what you’ll be able to accomplish.
Matthew Mayo (@mattmayo13) holds a grasp’s diploma in laptop science and a graduate diploma in knowledge mining. As managing editor of KDnuggets & Statology, and contributing editor at Machine Studying Mastery, Matthew goals to make complicated knowledge science ideas accessible. His skilled pursuits embody pure language processing, language fashions, machine studying algorithms, and exploring rising AI. He’s pushed by a mission to democratize information within the knowledge science neighborhood. Matthew has been coding since he was 6 years outdated.