Python strptime()

In this article, you will learn to create a datetime object from a string (with the help of examples).

The strptime() method creates a datetime object from the given string.

Note: You cannot create datetime object from every string. The string needs to be in a certain format.

1. 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:

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'>

1.1. How strptime() works?

The strptime() 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:

How strptime() works in Python?

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.

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

dt_object1 = 2018-11-12 09:15:32
dt_object2 = 2018-12-11 09:15:32

3. Format Code List

The table below shows all the format codes that you can use.

DirectiveMeaningExample
%aAbbreviated weekday name.Sun, Mon, …
%AFull weekday name.Sunday, Monday, …
%wWeekday as a decimal number.0, 1, …, 6
%dDay of the month as a zero-padded decimal.01, 02, …, 31
%-dDay of the month as a decimal number.1, 2, …, 30
%bAbbreviated month name.Jan, Feb, …, Dec
%BFull month name.January, February, …
%mMonth as a zero-padded decimal number.01, 02, …, 12
%-mMonth as a decimal number.1, 2, …, 12
%yYear without century as a zero-padded decimal number.00, 01, …, 99
%-yYear without century as a decimal number.0, 1, …, 99
%YYear with century as a decimal number.2013, 2019 etc.
%HHour (24-hour clock) as a zero-padded decimal number.00, 01, …, 23
%-HHour (24-hour clock) as a decimal number.0, 1, …, 23
%IHour (12-hour clock) as a zero-padded decimal number.01, 02, …, 12
%-IHour (12-hour clock) as a decimal number.1, 2, … 12
%pLocale’s AM or PM.AM, PM
%MMinute as a zero-padded decimal number.00, 01, …, 59
%-MMinute as a decimal number.0, 1, …, 59
%SSecond as a zero-padded decimal number.00, 01, …, 59
%-SSecond as a decimal number.0, 1, …, 59
%fMicrosecond as a decimal number, zero-padded on the left.000000 – 999999
%zUTC offset in the form +HHMM or -HHMM. 
%ZTime zone name. 
%jDay of the year as a zero-padded decimal number.001, 002, …, 366
%-jDay of the year as a decimal number.1, 2, …, 366
%UWeek 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
%WWeek 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
%cLocale’s appropriate date and time representation.Mon Sep 30 07:06:05 2013
%xLocale’s appropriate date representation.09/30/13
%XLocale’s appropriate time representation.07:06:05
%%A literal ‘%’ character.%

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

If you run this program, you will get an error.

ValueError: time data '12/11/2018' does not match format '%d %m %Y'