datetime, timedelta, and FormattingPython's built-in datetime module handles calendar dates, clock times, timestamps, and duration math. Always prefer timezone-aware datetime objects (datetime.now(timezone.utc)) for servers, logs, and APIs so daylight saving changes never corrupt timestamps.
You can format dates into readable strings with strftime() and parse incoming strings back into datetime objects with strptime().
timedelta represents a duration (days, hours, minutes) that you add to or subtract from any date or datetime.
from datetime import datetime, timedelta, timezone
now_utc = datetime.now(timezone.utc)
expires_at = now_utc + timedelta(days=7)
formatted = now_utc.strftime("%Y-%m-%d %H:%M UTC")
parsed = datetime.strptime("2026-11-12", "%Y-%m-%d")
print(formatted, expires_at.date(), parsed.year)
For ISO 8601 strings like "2026-11-12T10:30:00Z", datetime.fromisoformat() in Python 3.11+ parses them directly without format codes.
zoneinfoSince Python 3.9, the standard library zoneinfo.ZoneInfo converts UTC timestamps into regional timezones like "America/New_York" or "Asia/Dhaka" using IANA rules.
datetime.now() from a UTC-aware datetime raises TypeError.datetime.utcnow() in Python 3.12+: utcnow() is deprecated because it returns a naive object; call datetime.now(timezone.utc) instead.%m and %M: %m is month (01–12), while %M is minute (00–59).strftime and strptime?strftime ("string format time") turns a datetime into a formatted string. strptime ("string parse time") turns a text string into a datetime object.
Subtract one date or datetime from the other to get a timedelta, then read its .days attribute.
Store and serialize timestamps in UTC using ISO 8601 format (dt.isoformat()), and convert to the user's local timezone only at display time.
Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.
Quick Access With
Experiment with the code from this lesson in our interactive playground.