Módulo datetime
The datetime module provides classes for working with dates and times.
Core Classes
| Class |
Description |
date |
Year, month, day |
time |
Hour, minute, second, microsecond |
datetime |
Date + time combined |
timedelta |
Duration between two points |
timezone |
Fixed UTC offset |
Creating Objects
from datetime import date, time, datetime, timedelta, timezone
today = date.today() # 2024-05-01
now = datetime.now() # 2024-05-01 14:30:00.123456
utc_now = datetime.now(timezone.utc)
specific = datetime(2024, 1, 15, 10, 30, 0)
timedelta — Arithmetic
from datetime import datetime, timedelta
deadline = datetime.now() + timedelta(days=7, hours=2)
diff = deadline - datetime.now() # timedelta object
print(diff.days) # number of full days
print(diff.total_seconds()) # total seconds as float
dt = datetime(2024, 5, 1, 14, 30)
# datetime → string
dt.strftime("%Y-%m-%d %H:%M") # '2024-05-01 14:30'
dt.strftime("%d/%m/%Y") # '01/05/2024'
dt.isoformat() # '2024-05-01T14:30:00'
# string → datetime
datetime.strptime("2024-05-01", "%Y-%m-%d")
datetime.fromisoformat("2024-05-01T14:30:00")
Common strftime Codes
| Code |
Meaning |
Example |
%Y |
4-digit year |
2024 |
%m |
Month (01–12) |
05 |
%d |
Day (01–31) |
01 |
%H |
Hour 24h (00–23) |
14 |
%M |
Minute |
30 |
%S |
Second |
00 |
%A |
Weekday name |
Wednesday |
Timezone-aware vs Naive
from datetime import datetime, timezone, timedelta
# naive (no timezone info)
naive = datetime.now()
# aware (has timezone info)
aware = datetime.now(timezone.utc)
# custom offset (e.g. UTC-3)
br_tz = timezone(timedelta(hours=-3))
br_now = datetime.now(br_tz)
# Never compare naive and aware — raises TypeError
Key Interview Points
datetime.now() returns a naive datetime; datetime.now(timezone.utc) returns aware.
- Always store datetimes in UTC; convert to local time only for display.
timedelta supports days, seconds, microseconds, milliseconds, minutes, hours, weeks.
- Use
isoformat() / fromisoformat() for serialization (JSON, databases).
- For complex timezone handling (DST, named zones) use the
zoneinfo module (Python 3.9+) or pytz.