To convert a string to a date object in Python, use datetime.strptime() function.
For example, let’s convert “Dec 1 2021 5:33 PM” into a date object:
from datetime import datetime datetime_object = datetime.strptime("Dec 1 2021 5:33PM", "%b %d %Y %I:%M%p") print(datetime_object)
Output:
2021-12-01 17:33:00
In this guide, you will learn how datetime.strptime() function works. You will also learn about the dateutil module.
How Does the datetime.strptime() Function Work
To convert a date string to a datetime object, you need to import the datetime module to your project.
In case you are wondering, the strptime() stands for string parse time.
The basic syntax of datetime.strptime() is:
datetime.strptime(date_string, format)
Where:
- date_string is a date represented as a string.
- format is the date parsing format.
In the example you saw earlier, the format was specified as “%b %d %Y %I:%M%p”. Let’s take a closer look at what each character means:
- %b. Month name abbreviated.
- %d. Day of the month as a zero-padded number.
- %Y. Year number.
- %I. Hour in a 12-hour clock as a zero-padded number.
- %M. Minute is a zero-padded number.
- %p. AM/PM based on the locale.
For instance:
from datetime import datetime datetime_object = datetime.strptime("Dec 1 2021 5:33PM", "%b %d %Y %I:%M%p")
Read more about using the datetime module in Python.
Python datetime.strptime() Examples
Let’s have a look at some examples of using the datetime.strptime() function.
Example 1
Let’s convert a date in the format mm/dd/YY HH:MM:SS to a datetime object:
from datetime import datetime datetime_str = "12/07/21 11:25:13" datetime_object = datetime.strptime(datetime_str, "%m/%d/%y %H:%M:%S") print(datetime_object) # This is parsed as: print(repr(datetime_object))
Output:
2021-12-07 11:25:13 datetime.datetime(2021, 12, 7, 11, 25, 13)
Example 2
You can call the date() method on a datetime object produced by the strptime() function to convert it to a date object.
For instance:
from datetime import datetime date_str = '03-17-2021' date_object = datetime.strptime(date_str, "%m-%d-%Y").date() print(date_object) print(repr(date_object))
Output:
datetime.date(2018, 9, 19)
Example 3
You can call the time() method on a datetime object produced by the strptime() function to convert it to a time object.
For instance:
from datetime import datetime time_str = "12::43::19" time_object = datetime.strptime(time_str, "%H::%M::%S").time() print(time_object) print(repr(time_object))
Output:
12:43:19 datetime.time(12, 43, 19)
Datetime Object from ISO Format in Python 3.7+
To convert date strings of format YYYY-MM-DD HH:MM:SS (ISO Format), call datetime.fromisoformat() function.
This assumes you are running Python 3.7+.
For example:
from datetime import datetime date_string = "2021-12-01 10:44:53" date_object = datetime.fromisoformat(date_string) print(date_object)
Output:
2021-12-01 10:44:53
Alternative Approach
If you are dealing with lots of different time formats, you may benefit from using a third-party utility called dateutil.
This module guesses most of the date formats. This means you do not have to specify the format separately.
To use it, install the dateutil package by running the following in your command-line window:
pip install python-dateutil
Now you can use this package to parse dates from different date formats. Here are some examples of how it parses differently formatted date strings:
from dateutil import parser d1 = parser.parse("Jul 22 2004 11:00AM") # datetime.datetime(2004, 7, 22, 11, 0) d2 = parser.parse("Sat Oct 11 17:13:46 UTC 2003") # datetime.datetime(2003, 10, 11, 17, 13, 46, tzinfo=tzutc()) d3 = parser.parse("February 18, 2020") # datetime.datetime(2020, 2, 18, 0, 0) d4 = parser.parse("01/03/2027 11:03") # datetime.datetime(2027, 1, 3, 11, 3) d5 = parser.parse("Aug 19, 2019 1:33PM") # datetime.datetime(2019, 8, 19, 13, 33)
Dateutil Performance Issue
Notice that the dateutil module guesses the date formats on the fly. This involves some iteration behind the scenes, which makes the date parsing quite inefficient.
Let’s make a comparison by converting a date string 100,000 times with both datetime.strptime() and dateutil‘s parser.parse():
import time from datetime import datetime from dateutil import parser start1 = time.time() for _ in range(100_000): datetime.strptime("Dec 1 2021 5:33PM", "%b %d %Y %I:%M%p") end1 = time.time() strptime_parsing_time = end1 - start1 print(f"datetime.strptime(): {strptime_parsing_time}") start2 = time.time() for _ in range(100_000): parser.parse("Dec 1 2021 5:33PM") end2 = time.time() dateutil_parsing_time = end2 - start2 print(f"dateutil.parser: {dateutil_parsing_time}") print(f"The dateutil is {dateutil_parsing_time / strptime_parsing_time} times slower than datetime.strptime().")
Output:
datetime.strptime(): 0.8942279815673828 dateutil.parser: 6.366821765899658 The dateutil is 7.119908901463847 times slower than datetime.strptime().
For this particular time format, the dateutil module’s parser was roughly 7 times slower than the datetime.strptime().
So even though using the dateutil module is appealing, you should use the built-in datetime.strptime() function.
Thanks for reading. Happy coding!