Python strptime()
#
Learn to create a datetime object from a string (with the help of examples).
The strptime()
method creates a datetime (@ Example 9) object from the given string.
Note: You cannot create
datetime
object from every string. The string needs to be in a certain format.
Example 1: string to datetime object#
# Example 1: string to datetime object
from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
print("type of date_string =", type(date_string))
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
print("type of date_object =", type(date_object))
# When you run the program, the output will be something like below:
date_string = 21 June, 2018
type of date_string = <class 'str'>
date_object = 2018-06-21 00:00:00
type of date_object = <class 'datetime.datetime'>
How strptime()
works?#
The strftime()
class method takes two arguments:
string (that be converted to datetime)
format code
Based on the string and format code used, the method returns its equivalent datetime
object.
In the above example:
Here,
%d
- Represents the day of the month. Example: 01, 02, …, 31%B
- Month’s name in full. Example: January, February etc.%Y
- Year in four digits. Example: 2018, 2019 etc.
Example 2: string to datetime object#
# Example 2: string to datetime object
from datetime import datetime
dt_string = "12/11/2018 09:15:32"
# Considering date is in dd/mm/yyyy format
dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S")
print("dt_object1 =", dt_object1)
# Considering date is in mm/dd/yyyy format
dt_object2 = datetime.strptime(dt_string, "%m/%d/%Y %H:%M:%S")
print("dt_object2 =", dt_object2)
# When you run the program, the output will be something like below:
dt_object1 = 2018-11-12 09:15:32
dt_object2 = 2018-12-11 09:15:32
Format Code List#
The table below shows all the codes that you can pass to the strptime()
method.
Directive |
Meaning |
Example |
---|---|---|
|
Abbreviated weekday name. |
Sun, Mon, … |
|
Full weekday name. |
Sunday, Monday, … |
|
Weekday as a decimal number. |
0, 1, …, 6 |
|
Day of the month as a zero-padded decimal. |
01, 02, …, 31 |
|
Day of the month as a decimal number. |
1, 2, …, 30 |
|
Abbreviated month name. |
Jan, Feb, …, Dec |
|
Full month name. |
January, February, … |
|
Month as a zero-padded decimal number. |
01, 02, …, 12 |
|
Month as a decimal number. |
1, 2, …, 12 |
|
Year without century as a zero-padded decimal number. |
00, 01, …, 99 |
|
Year without century as a decimal number. |
0, 1, …, 99 |
|
Year with century as a decimal number. |
2013, 2019 etc. |
|
Hour (24-hour clock) as a zero-padded decimal number. |
00, 01, …, 23 |
|
Hour (24-hour clock) as a decimal number. |
0, 1, …, 23 |
|
Hour (12-hour clock) as a zero-padded decimal number. |
01, 02, …, 12 |
|
Hour (12-hour clock) as a decimal number. |
1, 2, … 12 |
|
Locale’s AM or PM. |
AM, PM |
|
Minute as a zero-padded decimal number. |
00, 01, …, 59 |
|
Minute as a decimal number. |
0, 1, …, 59 |
|
Second as a zero-padded decimal number. |
00, 01, …, 59 |
|
Second as a decimal number. |
0, 1, …, 59 |
|
Microsecond as a decimal number, zero-padded on the left. |
000000 - 999999 |
|
UTC offset in the form +HHMM or -HHMM. |
|
|
Time zone name. |
|
|
Day of the year as a zero-padded decimal number. |
001, 002, …, 366 |
|
Day of the year as a decimal number. |
1, 2, …, 366 |
|
Week number of the year (Sunday as the first day of the week). All days in a new year preceding the first Sunday are considered to be in week 0. |
00, 01, …, 53 |
|
Week number of the year (Monday as the first day of the week). All days in a new year preceding the first Monday are considered to be in week 0. |
00, 01, …, 53 |
|
Locale’s appropriate date and time representation. |
Mon Sep 30 07:06:05 2013 |
|
Locale’s appropriate date representation. |
09/30/13 |
|
Locale’s appropriate time representation. |
07:06:05 |
|
A literal ‘%’ character. |
% |
ValueError
in strptime()
#
If the string (first argument) and the format code (second argument) passed to the strptime()
doesn’t match, you will get ValueError
. For example:
from datetime import datetime
date_string = "12/11/2018"
date_object = datetime.strptime(date_string, "%d %m %Y")
print("date_object =", date_object)
# When you run the program, the output will be something like below:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-fffbe51149a7> in <module>
2
3 date_string = "12/11/2018"
----> 4 date_object = datetime.strptime(date_string, "%d %m %Y")
5
6 print("date_object =", date_object)
C:\ProgramData\Anaconda3\lib\_strptime.py in _strptime_datetime(cls, data_string, format)
566 """Return a class cls instance based on the input string and the
567 format string."""
--> 568 tt, fraction, gmtoff_fraction = _strptime(data_string, format)
569 tzname, gmtoff = tt[-2:]
570 args = tt[:6] + (fraction,)
C:\ProgramData\Anaconda3\lib\_strptime.py in _strptime(data_string, format)
347 found = format_regex.match(data_string)
348 if not found:
--> 349 raise ValueError("time data %r does not match format %r" %
350 (data_string, format))
351 if len(data_string) != found.end():
ValueError: time data '12/11/2018' does not match format '%d %m %Y'
We also recommend you to check Python strftime().