Tutorial

How To Convert a String to a datetime or time Object in Python

Updated on December 14, 2022
Default avatar

By Pankaj and Andrea Anderson

How To Convert a String to a datetime or time Object in Python

Introduction

The Python datetime and time modules both include a strptime() class method to convert strings to objects.

In this article, you’ll use strptime() to convert strings into datetime and struct_time() objects.

Deploy your Python applications from GitHub using DigitalOcean App Platform. Let DigitalOcean focus on scaling your app.

Converting a String to a datetime object using datetime.strptime()

The syntax for the datetime.strptime() method is:

datetime.strptime(date_string, format)

The datetime.strptime() method returns a datetime object that matches the date_string parsed by the format. Both arguments are required and must be strings.

For details about the format directives used in datetime.strptime(), refer to the strftime() and strptime() Format Codes in the Python documentation.

Convert String to datetime.datetime() Object Example

The following example converts a date and time string into a datetime.datetime() object, and prints the class name and value of the resulting object:

from datetime import datetime

datetime_str = '09/19/22 13:55:26'

datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')

print(type(datetime_object))
print(datetime_object)  # printed in default format

The output is:

<class 'datetime.datetime'>
2022-09-19 13:55:26

Convert String to datetime.date() Object Example

The following example converts a date string into a datetime.date() object, and prints the class type and value of the resulting object:

from datetime import datetime

date_str = '09-19-2022'

date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
print(type(date_object))
print(date_object)  # printed in default format

The output is:

<class 'datetime.date'>
2022-09-19

Convert String to datetime.time() Object Example

The following example converts a time string into a datetime.time() object, and prints the class type and value of the resulting object:

from datetime import datetime

time_str = '13::55::26'
time_object = datetime.strptime(time_str, '%H::%M::%S').time()
print(type(time_object))
print(time_object)

The output is:

<class 'datetime.time'>
13:55:26

Convert String to datetime.datetime() Object with Locale Example

The following example converts a German locale date string into a datetime.datetime() object, and prints the class type and value of the resulting object:

from datetime import datetime
import locale

locale.setlocale(locale.LC_ALL, 'de_DE')
date_str_de_DE = '16-Dezember-2022 Freitag'  # de_DE locale
datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
print(type(datetime_object))
print(datetime_object)

The output is:

<class 'datetime.datetime'>
2022-12-16 00:00:00

Note that the resulting object doesn’t include the weekday name from the input string because a datetime.datetime() object includes the weekday only as a decimal number.

Converting a String to a struct_time() Object Using time.strptime()

The syntax for the time.strptime() method is:

time.strptime(time_string[, format])

The time.strptime() method returns a time.struct_time() object that matches the time_string parsed by the format. The time_string is required and both arguments must be strings. If format is not provided, the default is:

'%a %b %d %H:%M:%S %Y'

This corresponds to the format returned by the ctime() function.

The format directives are the same for time.strptime() and time.strftime(). Learn more about the format directives for the time module in the Python documentation.

Convert String to struct_time() Object With Format Provided Example

The following example converts a time string into a time.struct_time() object by providing the format argument, and prints the value of the resulting object:

import time

time_str = '11::33::54'
time_obj = time.strptime(time_str, '%H::%M::%S')
print("A time.struct_time object that uses the format provided:")
print(time_obj)

The output is:

A time.struct_time object that uses the format provided:
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1,
tm_hour=11, tm_min=33, tm_sec=54, tm_wday=0, tm_yday=1,
tm_isdst=-1)

As shown in the output, when you convert a string into a time.struct_time() object, the strptime() method uses placeholder values for any format directives that aren’t defined in the format argument.

Convert String to struct_time() Object Using Default Format Example

If you don’t provide a format argument when you convert a time string into a time.struct_time() object, then the default format is used and an error occurs if the input string does not exactly match the default format of:

 '%a %b %d %H:%M:%S %Y'

The following example converts a time string into a time.struct_time() object with no format argument provided, and prints the value of the resulting object:

import time

# default format - "%a %b %d %H:%M:%S %Y"
time_str_default = 'Mon Dec 12 14:55:02 2022'
time_obj_default = time.strptime(time_str_default)
print("A time.struct_time object that uses the default format:")
print(time_obj_default)

The output is:

A time.struct_time object that uses the default format:
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=12,
tm_hour=14, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=346,
tm_isdst=-1)

As shown in the output, when you convert a string into a time.struct_time() object, the strptime() method uses placeholder values for any format directives that aren’t defined in the format argument or by the default format if no format is provided.

Troubleshooting strptime() Errors

If the input string can’t be parsed by strptime() using the provided format, then a ValueError is raised. You can use the try block to test for parsing errors, along with the except block to print the results. The ValueError messages that you get when you use the strptime() method clearly explain the root causes of the parsing errors. The following example demonstrates some common errors, such as extra data and a format mismatch:

from datetime import datetime
import time

datetime_str = '09/19/18 13:55:26'

try:
    datetime_object = datetime.strptime(datetime_str, '%m/%d/%y')
except ValueError as ve1:
    print('ValueError 1:', ve1)

time_str = '99::55::26'

try:
    time_object = time.strptime(time_str, '%H::%M::%S')
except ValueError as ve2:
    print('ValueError 2:', ve2)

The output is:

ValueError 1: unconverted data remains:  13:55:26
ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'

Conclusion

In this tutorial, you converted date and time strings into datetime and time objects using Python. Continue your learning with more Python tutorials.

Want to deploy your application quickly? Try Cloudways, the #1 managed hosting provider for small-to-medium businesses, agencies, and developers - for free. DigitalOcean and Cloudways together will give you a reliable, scalable, and hassle-free managed hosting experience with anytime support that makes all your hosting worries a thing of the past. Start with $100 in free credits!

Learn more here


About the authors
Default avatar
Pankaj

author


Default avatar

Technical Editor


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
May 18, 2021

Hi Pankaj there is no other way to handle this exception if take off try and except time_str = ‘99::55::26’ try: time_object = time.strptime(time_str, ‘%H::%M::%S’) except ValueError as e: print(‘ValueError:’, e)

- Mpoyi Tshibuyi Frank

    JournalDev
    DigitalOcean Employee
    DigitalOcean Employee badge
    February 25, 2021

    “%w Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. – 0, 1, 2, 3, 4, 5, 6” That’s incorrect, Sunday is 6 and Saturday is 5.

    - Aaron Smyth

      JournalDev
      DigitalOcean Employee
      DigitalOcean Employee badge
      December 27, 2020

      Lucid presentation. Nice blog

      - Ganesh

        JournalDev
        DigitalOcean Employee
        DigitalOcean Employee badge
        December 11, 2020

        I am looping over my dataframe where df[‘date’] has the format ‘yyyy-mm-dd’. However, python says the format does not match the data. nt = len(df[‘date’]) for it in range(nt): df[‘date’] = datetime.datetime.strptime(df[‘date’][it], ‘%Y-%m-%d’).date() This is the error I get: ValueError: time data ‘[yyyy-mm-dd]’ does not match format ‘[%Y-%m-%d]’ Can anyone help me?

        - joost

          JournalDev
          DigitalOcean Employee
          DigitalOcean Employee badge
          August 20, 2020

          Excellent and informative documentation. Thank you.

          - Edwin

            JournalDev
            DigitalOcean Employee
            DigitalOcean Employee badge
            August 11, 2020

            Hello Sir, How can we convert Tue AUG 11 02:30:18 UTC 2020? I tried from datetime import datetime datetime_object =“” datetime_str = “Tue Aug 11 01:40:27 UTC 2020” try: datetime_object = datetime.strptime(datetime_str, ‘%A %B %d %H:%M:%S %Z %Y’) print(type(datetime_object)) print(datetime_object) except ValueError as ve: print(‘ValueError Raised:’, ve) But it is not working.Can you please help?

            - Tiny Jimmy

              JournalDev
              DigitalOcean Employee
              DigitalOcean Employee badge
              June 13, 2020

              Very crisp and informative.Try more like this.

              - Yogesh

                JournalDev
                DigitalOcean Employee
                DigitalOcean Employee badge
                May 21, 2020

                in string to datetime code line no 5 datetime_object = datetime.strptime(datetime_str, ‘%m/%d/%y %H:%M:%S’) must be datetime_object = datetime.datetime.strptime(datetime_str, ‘%m/%d/%Y %H:%M:%S’) 1. datetime itself a module which have no strptime attribute. 2. %y must be %Y. A format is a format which cannot be changed.

                - Keshav wadhwa

                  JournalDev
                  DigitalOcean Employee
                  DigitalOcean Employee badge
                  May 18, 2020

                  There is a mistake in this article. The ‘y’ in ‘%m/%d/%y’ will be capital. so the format will be ‘%m/%d/%Y’ i faced this problem this is the mistak in this article

                  - new

                    JournalDev
                    DigitalOcean Employee
                    DigitalOcean Employee badge
                    April 21, 2020

                    Hello, Can you please let me know, how to compare 2 dates with $gte and $lte using python and mongodb ?

                    - RB

                      Try DigitalOcean for free

                      Click below to sign up and get $200 of credit to try our products over 60 days!

                      Sign up

                      Join the Tech Talk
                      Success! Thank you! Please check your email for further details.

                      Please complete your information!

                      Get our biweekly newsletter

                      Sign up for Infrastructure as a Newsletter.

                      Hollie's Hub for Good

                      Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

                      Become a contributor

                      Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

                      Welcome to the developer cloud

                      DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

                      Learn more
                      DigitalOcean Cloud Control Panel