Convert datetime object to a String of date only in Python
Categories:
Converting Python Datetime Objects to Date-Only Strings

Learn how to extract and format only the date portion from a Python datetime object into a clean string representation.
Python's datetime
module is incredibly powerful for handling dates and times. Often, you'll find yourself with a datetime
object that contains both date and time information, but your application only requires the date part. This article will guide you through various methods to convert a datetime
object into a string representing only the date, ensuring your data is presented exactly as needed.
Understanding the Datetime Object
Before diving into conversions, it's important to understand what a datetime
object holds. A datetime
object typically stores year, month, day, hour, minute, second, and microsecond. When you only need the date, you're essentially discarding the time components and formatting the remaining date components into a string.
flowchart TD A[Datetime Object] --> B{Extract Date Component} B --> C[Date Object] C --> D{Format to String} D --> E["Date-Only String (e.g., 'YYYY-MM-DD')"] A --> F{Direct String Formatting} F --> E
Flowchart illustrating the process of converting a datetime object to a date-only string.
Method 1: Using strftime()
for Custom Formatting
The strftime()
method (string format time) is the most flexible way to format datetime
objects into strings. It allows you to specify a format code to control how each part of the date and time is represented. To get only the date, you'll use format codes for year, month, and day.
import datetime
# Create a datetime object
now = datetime.datetime.now()
print(f"Original datetime: {now}")
# Format to 'YYYY-MM-DD'
date_string_ymd = now.strftime("%Y-%m-%d")
print(f"Formatted YYYY-MM-DD: {date_string_ymd}")
# Format to 'MM/DD/YYYY'
date_string_mdy = now.strftime("%m/%d/%Y")
print(f"Formatted MM/DD/YYYY: {date_string_mdy}")
# Format to 'DD Mon YYYY' (e.g., '25 Dec 2023')
date_string_dmy_short_month = now.strftime("%d %b %Y")
print(f"Formatted DD Mon YYYY: {date_string_dmy_short_month}")
Examples of using strftime()
with different format codes to extract date-only strings.
Common strftime()
format codes for dates include:
%Y
: Year with century (e.g., 2023)%m
: Month as a zero-padded decimal number (e.g., 01, 12)%d
: Day of the month as a zero-padded decimal number (e.g., 01, 31)%b
: Abbreviated month name (e.g., Jan, Dec)%B
: Full month name (e.g., January, December)
Method 2: Using the date()
Method and isoformat()
The datetime
object has a convenient date()
method that returns a date
object (which only contains year, month, and day). Once you have a date
object, you can use its isoformat()
method to get a date string in the ISO 8601 format (YYYY-MM-DD
). This is often preferred for data exchange and consistency.
import datetime
# Create a datetime object
now = datetime.datetime.now()
print(f"Original datetime: {now}")
# Extract the date part as a date object
date_only = now.date()
print(f"Date object: {date_only}")
# Convert the date object to an ISO formatted string
date_string_iso = date_only.isoformat()
print(f"ISO formatted date string: {date_string_iso}")
Using date()
and isoformat()
for a standard date string.
isoformat()
method on a date
object always returns the date in YYYY-MM-DD
format. If you need a different format, strftime()
is the way to go.Method 3: F-strings (Python 3.6+)
For Python 3.6 and later, f-strings offer a concise and readable way to format datetime
objects directly. You can embed strftime()
-like format specifiers within an f-string.
import datetime
# Create a datetime object
now = datetime.datetime.now()
print(f"Original datetime: {now}")
# Format using an f-string with strftime-like specifiers
date_string_fstring = f"{now:%Y-%m-%d}"
print(f"Formatted with f-string: {date_string_fstring}")
# Another f-string example
date_string_fstring_alt = f"Today's date is {now:%B %d, %Y}."
print(f"Another f-string format: {date_string_fstring_alt}")
Formatting date-only strings using f-strings.
strftime()
internally. If you need to support older Python versions, stick to explicit strftime()
calls.