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).
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:00

Method 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.999999

Method 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:00

Method 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:00

Common 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:00

Key Takeaways

Remember:
  • Use datetime.combine(date, time) for most conversions
  • time.min gives midnight (00:00:00)
  • time.max gives 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