Python datetime Module: A Complete Tutorial

Last updated 5 months, 1 week ago | 355 views 75     5

Tags:- Python

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.