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:

  1. string (that be converted to datetime)

  2. 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

%a

Abbreviated weekday name.

Sun, Mon, …

%A

Full weekday name.

Sunday, Monday, …

%w

Weekday as a decimal number.

0, 1, …, 6

%d

Day of the month as a zero-padded decimal.

01, 02, …, 31

%-d

Day of the month as a decimal number.

1, 2, …, 30

%b

Abbreviated month name.

Jan, Feb, …, Dec

%B

Full month name.

January, February, …

%m

Month as a zero-padded decimal number.

01, 02, …, 12

%-m

Month as a decimal number.

1, 2, …, 12

%y

Year without century as a zero-padded decimal number.

00, 01, …, 99

%-y

Year without century as a decimal number.

0, 1, …, 99

%Y

Year with century as a decimal number.

2013, 2019 etc.

%H

Hour (24-hour clock) as a zero-padded decimal number.

00, 01, …, 23

%-H

Hour (24-hour clock) as a decimal number.

0, 1, …, 23

%I

Hour (12-hour clock) as a zero-padded decimal number.

01, 02, …, 12

%-I

Hour (12-hour clock) as a decimal number.

1, 2, … 12

%p

Locale’s AM or PM.

AM, PM

%M

Minute as a zero-padded decimal number.

00, 01, …, 59

%-M

Minute as a decimal number.

0, 1, …, 59

%S

Second as a zero-padded decimal number.

00, 01, …, 59

%-S

Second as a decimal number.

0, 1, …, 59

%f

Microsecond as a decimal number, zero-padded on the left.

000000 - 999999

%z

UTC offset in the form +HHMM or -HHMM.

%Z

Time zone name.

%j

Day of the year as a zero-padded decimal number.

001, 002, …, 366

%-j

Day of the year as a decimal number.

1, 2, …, 366

%U

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

%U

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

%c

Locale’s appropriate date and time representation.

Mon Sep 30 07:06:05 2013

%x

Locale’s appropriate date representation.

09/30/13

%X

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().