Working with dates and times is a common requirement in many Python applications — from logging and timestamps to time-based data processing and automation. Python’s built-in datetime
module provides a powerful and flexible set of tools for handling these tasks.
In this tutorial, you’ll learn:
-
What the
datetime
module is -
How to work with dates and times
-
Formatting and parsing date strings
-
Performing date arithmetic
-
Real-world use cases
-
Tips and common pitfalls
What is the datetime
Module?
Python’s datetime
module supplies classes for manipulating dates and times in both simple and complex ways. It supports:
-
Date and time arithmetic
-
Time zones
-
Formatting and parsing
-
And more
To use it, you simply:
import datetime
Core Classes in datetime
Class | Description |
---|---|
date |
Handles dates (year, month, day) |
time |
Handles time (hour, minute, second, microsecond) |
datetime |
Combines both date and time |
timedelta |
Represents the difference between two dates/times |
timezone |
Supports time zone info |
Working with Dates
Create a date object:
from datetime import date
today = date.today()
print("Today's date:", today)
Access date components:
print(today.year)
print(today.month)
print(today.day)
Create a specific date:
d = date(2025, 12, 25)
print("Christmas:", d)
⏰ Working with Time
from datetime import time
t = time(14, 30, 45)
print("Time:", t) # Output: 14:30:45
print("Hour:", t.hour)
Working with Date and Time
from datetime import datetime
now = datetime.now()
print("Current datetime:", now)
specific = datetime(2025, 5, 7, 14, 0)
print("Specific datetime:", specific)
Replace components:
new_time = now.replace(hour=9, minute=0)
print("Modified time:", new_time)
Date Arithmetic with timedelta
from datetime import timedelta
delta = timedelta(days=7)
print("7 days:", delta)
future = datetime.now() + delta
print("One week from now:", future)
past = datetime.now() - timedelta(days=30)
print("30 days ago:", past)
Formatting Dates (strftime
)
Convert a datetime
object to a string:
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))
Common format codes:
Code | Meaning | Example |
---|---|---|
%Y |
Year (4 digits) | 2025 |
%m |
Month (01–12) | 05 |
%d |
Day (01–31) | 07 |
%H |
Hour (00–23) | 14 |
%M |
Minute | 30 |
%S |
Second | 45 |
Parsing Dates (strptime
)
Convert a string into a datetime
object:
dt = datetime.strptime("2025-05-07 14:00:00", "%Y-%m-%d %H:%M:%S")
print("Parsed datetime:", dt)
Working with Time Zones
from datetime import datetime, timezone, timedelta
utc_time = datetime.now(timezone.utc)
print("UTC Time:", utc_time)
# Create a time zone offset of +5:30 (e.g., IST)
ist = timezone(timedelta(hours=5, minutes=30))
local_time = utc_time.astimezone(ist)
print("IST Time:", local_time)
✅ Complete Example
from datetime import datetime, timedelta
# Get current date and time
now = datetime.now()
print("Now:", now)
# Add 10 days
future_date = now + timedelta(days=10)
print("10 days from now:", future_date)
# Format date
formatted = now.strftime("%A, %d %B %Y %I:%M %p")
print("Formatted:", formatted)
# Parse a date string
parsed = datetime.strptime("2025-12-31 23:59:59", "%Y-%m-%d %H:%M:%S")
print("Parsed:", parsed)
# Difference in days
days_left = parsed - now
print("Days until new year:", days_left.days)
Tips for Using datetime
-
✅ Use
datetime.now()
for local time,datetime.utcnow()
for UTC -
✅ Use
timedelta
for date arithmetic instead of manually adjusting components -
✅ Use
strftime()
for readable output and logging -
✅ Use
strptime()
for parsing date strings into objects -
✅ Leverage time zones with
timezone
if you work with multiple regions
⚠️ Common Pitfalls
Pitfall | Solution |
---|---|
❌ Mixing naive and aware datetime objects | Always convert to same time zone before comparing |
❌ Using wrong format in strptime() |
Make sure the string matches the format string exactly |
❌ Forgetting to import specific classes | Use from datetime import datetime, timedelta for clarity |
❌ Assuming datetime.now() is UTC |
Use datetime.utcnow() or datetime.now(timezone.utc) |
Summary Table
Task | Method |
---|---|
Get current date/time | datetime.now() |
Create custom date/time | datetime(2025, 5, 7, 14, 0) |
Format datetime | .strftime("%Y-%m-%d") |
Parse datetime | datetime.strptime("2025-05-07", "%Y-%m-%d") |
Add/Subtract time | datetime +/- timedelta(days=...) |
Time zones | datetime.now(timezone.utc) |
Final Thoughts
The datetime
module is a powerful tool for handling all your date and time needs in Python — whether it's scheduling, timestamping, logging, or working across time zones.
By mastering the datetime
module, you’ll gain better control over time-based data in your applications and write cleaner, more accurate programs.