Python Date to Datetime
Converting date objects to datetime in Python
Understanding Date vs Datetime
date: Represents only the date (year, month, day) without time information.
datetime: Represents both date and time (year, month, day, hour, minute, second, microsecond).
datetime: Represents both date and time (year, month, day, hour, minute, second, microsecond).
from datetime import date, datetime
# date object - only date
my_date = date(2026, 2, 2)
print(my_date) # 2026-02-02
# datetime object - date + time
my_datetime = datetime(2026, 2, 2, 14, 30, 0)
print(my_datetime) # 2026-02-02 14:30:00Method 1: Using datetime.combine()
The most common and recommended method:
from datetime import date, datetime, time
# Create a date object
my_date = date(2026, 2, 2)
# Convert to datetime with midnight (00:00:00)
dt = datetime.combine(my_date, time.min)
print(dt) # 2026-02-02 00:00:00
# Convert to datetime with specific time
dt = datetime.combine(my_date, time(14, 30, 0))
print(dt) # 2026-02-02 14:30:00
# Convert to datetime with end of day (23:59:59)
dt = datetime.combine(my_date, time.max)
print(dt) # 2026-02-02 23:59:59.999999Method 2: Using datetime Constructor
from datetime import date, datetime
my_date = date(2026, 2, 2)
# Extract components and create datetime
dt = datetime(my_date.year, my_date.month, my_date.day)
print(dt) # 2026-02-02 00:00:00
# With specific time
dt = datetime(my_date.year, my_date.month, my_date.day, 14, 30, 0)
print(dt) # 2026-02-02 14:30:00Method 3: Using strptime() for String Conversion
from datetime import datetime
# If you have a date string
date_string = "2026-02-02"
dt = datetime.strptime(date_string, "%Y-%m-%d")
print(dt) # 2026-02-02 00:00:00
# Different date formats
date_string = "02/02/2026"
dt = datetime.strptime(date_string, "%m/%d/%Y")
print(dt) # 2026-02-02 00:00:00Common Format Codes
| Code | Meaning | Example |
|---|---|---|
| %Y | Year (4 digits) | 2026 |
| %y | Year (2 digits) | 26 |
| %m | Month (01-12) | 02 |
| %d | Day (01-31) | 02 |
| %H | Hour (00-23) | 14 |
| %M | Minute (00-59) | 30 |
| %S | Second (00-59) | 00 |
Practical Examples
Example 1: Get Current Date as Datetime
from datetime import date, datetime, time
# Get today's date
today = date.today()
# Convert to datetime at midnight
today_dt = datetime.combine(today, time.min)
print(today_dt)Example 2: Add Time to Date
from datetime import date, datetime, time
my_date = date(2026, 12, 25)
# Christmas at 9:00 AM
christmas_morning = datetime.combine(my_date, time(9, 0))
# Christmas at 6:00 PM
christmas_evening = datetime.combine(my_date, time(18, 0))Example 3: Date Range with Times
from datetime import date, datetime, time, timedelta
start_date = date(2026, 1, 1)
end_date = date(2026, 1, 7)
# Start of day for start_date
start_dt = datetime.combine(start_date, time.min)
# End of day for end_date
end_dt = datetime.combine(end_date, time.max)
print(f"Range: {start_dt} to {end_dt}")Reverse: Datetime to Date
from datetime import datetime
dt = datetime(2026, 2, 2, 14, 30, 0)
# Extract date from datetime
my_date = dt.date()
print(my_date) # 2026-02-02
print(type(my_date)) # <class 'datetime.date'>Working with Timezones
from datetime import date, datetime, time
from zoneinfo import ZoneInfo # Python 3.9+
my_date = date(2026, 2, 2)
# Create datetime with timezone
dt_utc = datetime.combine(my_date, time(12, 0), tzinfo=ZoneInfo("UTC"))
dt_ny = datetime.combine(my_date, time(12, 0), tzinfo=ZoneInfo("America/New_York"))
print(dt_utc)
print(dt_ny)Common Use Cases
Database Operations
# When storing dates in databases that require datetime
from datetime import date, datetime, time
user_birthdate = date(1990, 5, 15)
db_timestamp = datetime.combine(user_birthdate, time.min)Scheduling and Appointments
from datetime import date, datetime, time
appointment_date = date(2026, 3, 15)
appointment_time = time(10, 30)
# Combine for full appointment datetime
appointment = datetime.combine(appointment_date, appointment_time)Date Calculations
from datetime import date, datetime, time, timedelta
my_date = date(2026, 2, 2)
dt = datetime.combine(my_date, time.min)
# Add 7 days
future_dt = dt + timedelta(days=7)
print(future_dt) # 2026-02-09 00:00:00Key Takeaways
Remember:
- Use
datetime.combine(date, time)for most conversions time.mingives midnight (00:00:00)time.maxgives end of day (23:59:59.999999)- Use
dt.date()to extract date from datetime strptime()is for parsing date strings- Always consider timezone requirements