datetime
Updated March 13, 2026 · Modules
datetime date time timedelta timezone stdlib
The datetime module provides classes for manipulating dates and times. It is one of the most frequently used standard library modules for any application that deals with time-related data.
datetime.datetime
The datetime class combines a date and a time into a single object.
Constructors
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
datetime.now(tz=None) # Current local datetime
datetime.today() # Current local datetime (no tzinfo)
datetime.utcnow() # Current UTC datetime (deprecated)
datetime.fromtimestamp(timestamp, tz=None) # From Unix timestamp
datetime.strptime(date_string, format) # Parse from string
Attributes
| Attribute | Type | Range |
|---|---|---|
year | int | 1-9999 |
month | int | 1-12 |
day | int | 1-31 |
hour | int | 0-23 |
minute | int | 0-59 |
second | int | 0-59 |
microsecond | int | 0-999999 |
tzinfo | tzinfo or None | - |
Methods
datetime.date() # Return date part
datetime.time() # Return time part
datetime.timetz() # Return time part with tzinfo
datetime.replace(...) # Return new datetime with changes
datetime.strftime(format) # Format as string
datetime.timestamp() # Return Unix timestamp
datetime.weekday() # Return day of week (0=Monday)
datetime.isoweekday() # Return day of week (1=Monday)
datetime.isocalendar() # Return (ISO year, ISO week, ISO day)
Examples
from datetime import datetime, timezone
# Current datetime
now = datetime.now()
print(now)
# 2026-03-08 20:27:45.123456
# Specific datetime
dt = datetime(2026, 3, 8, 14, 30, 0)
print(dt)
# 2026-03-08 14:30:00
# Parse from string
parsed = datetime.strptime("2026-03-08 14:30:00", "%Y-%m-%d %H:%M:%S")
print(parsed)
# 2026-03-08 14:30:00
# Format datetime
formatted = now.strftime("%B %d, %Y at %I:%M %p")
print(formatted)
# March 08, 2026 at 08:27 PM
# With timezone
aware = datetime.now(timezone.utc)
print(aware)
# 2026-03-08 20:27:45.123456+00:00
datetime.date
The date class represents a date (year, month, day) without a time component.
Constructors
date(year, month, day)
date.today() # Current date
date.fromtimestamp(timestamp) # From Unix timestamp
date.fromordinal(ordinal) # From proleptic Gregorian ordinal
Methods
date.replace(...) # Return new date
date.strftime(format) # Format as string
date.weekday() # 0=Monday
date.isoweekday() # 1=Monday
date.isocalendar() # (ISO year, ISO week, ISO day)
date.toordinal() # Proleptic Gregorian ordinal
Examples
from datetime import date
today = date.today()
print(today)
# 2026-03-08
specific = date(2026, 12, 25)
print(specific)
# 2026-12-25
# Date arithmetic
new_year = date(2027, 1, 1)
days_until = (new_year - today).days
print(f"Days until New Year: {days_until}")
# Days until New Year: 299
datetime.time
The time class represents a time of day independent of any particular date.
Constructors
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Attributes
| Attribute | Type | Range |
|---|---|---|
hour | int | 0-23 |
minute | int | 0-59 |
second | int | 0-59 |
microsecond | int | 0-999999 |
tzinfo | tzinfo or None | - |
Examples
from datetime import time
t = time(14, 30, 45)
print(t)
# 14:30:45
# Format
print(t.strftime("%I:%M %p"))
# 02:30 PM
datetime.timedelta
The timedelta class represents a duration - the difference between two dates or times.
Constructors
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Attributes
| Attribute | Type |
|---|---|
days | int |
seconds | int |
microseconds | int |
Properties
td.total_seconds() # Total seconds as float
Examples
from datetime import datetime, timedelta, date
# Date arithmetic
now = datetime.now()
one_week_later = now + timedelta(weeks=1)
print(one_week_later)
# 2026-03-15 20:27:45.123456
# Duration between dates
dt1 = datetime(2026, 1, 1)
dt2 = datetime(2026, 3, 8)
delta = dt2 - dt1
print(delta.days)
# 66
print(delta.total_seconds())
# 5702400.0
# Calculate business days
def business_days(start, end):
delta = end - start
business = sum(1 for i in range(delta.days)
if (start + timedelta(days=i)).weekday() < 5)
return business
print(business_days(date(2026, 1, 1), date(2026, 1, 31)))
# 22
datetime.timezone
The timezone class represents a fixed offset from UTC.
Constructors
timezone(offset, name=None) # offset is a timedelta
timezone.utc # UTC timezone
Examples
from datetime import datetime, timezone, timedelta
# Fixed offset
eastern = timezone(timedelta(hours=-5), "EST")
dt = datetime(2026, 3, 8, 14, 30, 0, tzinfo=eastern)
print(dt)
# 2026-03-08 14:30:00-05:00
# UTC
utc_dt = datetime.now(timezone.utc)
print(utc_dt)
# 2026-03-08 20:27:45.123456+00:00
# Convert between timezones
est = timezone(timedelta(hours=-5))
pst = timezone(timedelta(hours=-8))
dt_est = datetime(2026, 3, 8, 14, 30, tzinfo=est)
dt_pst = dt_est.astimezone(pst)
print(dt_pst)
# 2026-03-08 11:30:00-08:00
Common Patterns
Age calculation
from datetime import date
def age(birthday):
today = date.today()
age = today.year - birthday.year
if (today.month, today.day) < (birthday.month, birthday.day):
age -= 1
return age
print(age(date(1990, 6, 15)))
# 35
Unix timestamp conversion
from datetime import datetime, timezone
# datetime to timestamp
dt = datetime(2026, 3, 8, 14, 30, 0, tzinfo=timezone.utc)
print(dt.timestamp())
# 1772980200.0
# timestamp to datetime
ts = 1772980200.0
dt = datetime.fromtimestamp(ts, tz=timezone.utc)
print(dt)
# 2026-03-08 14:30:00+00:00