In Development Last updated:
Share on:
Cloudways offers managed cloud hosting for any size business to host a website or complex web applications.

Converting from one type of data to another type of data is crucial in any programming language. Almost all programming languages support type conversions for built-in data types.

Custom data types like datetime need extra modules for conversions. We need modules, especially for datetime conversions as working them was never been easy for programmers. Luckily, python has built-in modules to work with datetime.

We will learn how to convert a datetime string to a datetime object in Python using different modules. Before jumping into that, let’s see why we need to convert it in the first place.

Why do we need to convert a datetime string to a datetime object?

When we have to work with dates, it’s not easy to work if they are in the string format. Converting them to datetime format makes working with them very easy. Dates in strings are like normal strings. It won’t have any special methods to work with dates. It will have general string methods, which we won’t be needing while working with dates.

Let’s say we have to compare two dates. If they are in string format, we can compare them correctly. If they are in datetime format, we can use the comparison operators like numbers.

This is only one scenario where converting to datetime format makes things easy. There are plenty of scenarios like adding dates, subtracting, handling timezones, etc., where converting datetime string to datetime object makes our lives more easier than ever.

With that said let’s see different ways to convert a datetime string to a datetime object. We will be using built-in datetime and third-party dateutil modules to convert the datetime string to datetime object. Let’s start with the datetime module

Using datetime

The datetime is a built-in module of Python which is used to work with dates and times. There are a lot of classes in this module that helps us to work with dates and time. We will be using datetime.datetime class for the conversion.

The datetime.datetime has many methods. We are interested in the strptime method which will help us in the conversion. Let’s check it.

datetime.strptime

The datetime.strptime method is used to convert datetime string to a datetime object. It takes two strings, one is datetime string and the other is the format of that datetime string. And it returns the datetime object.

Let’s see an example

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

If you run the above code, you will see the following output.

2022-12-19 21:37:56

We have taken a datetime string and converted it to datetime object using datetime.strptime method. Make sure that the format that you are providing to the method exactly matches the datetime string. If they didn’t match, then you may get an error or incorrect output.

We have used some formatting codes for the datetime format. You can refer to all of the format codes in the docs.

The datetime.strptime method returns complete datetime. If you want to get the date and time separately, we can use the date time methods of datetime object. Let’s see the code.

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"

## getting date separately
print("Date:", datetime.strptime(string, formatting).date())

## getting time separately
print("Time:", datetime.strptime(string, formatting).time())

Run the above code and you will see the following output.

Date: 2022-12-19
Time: 21:37:56

The methods date and time will return their objects respectively. They will again have their respective methods for dates and times.

We have provided the correct strings and formats for the datetime.strptime method that we have seen above. If we didn’t provide them correctly, then we will get errors. Let’s see how to handle those errors. Run the following code.

from datetime import datetime

string = "19:12:2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

The above code will throw an error because the formatting doesn’t match the datetime string. To handle these kinds of errors, we can use Pythons’ try-except. Let’s add it.

from datetime import datetime

try:
    string = "19:12:2022 09:37:56 PM"
    formatting = "%d-%m-%Y %I:%M:%S %p"
    print(datetime.strptime(string, formatting))
except ValueError as error:
    print(error)

Now, run the code again. You will see the following error message without breaking the code.

time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'

Similarly, we can add the try-except for the coming parser.parse method as well. It helps us to avoid breaking the code in the middle. This is not specially related to this tutorial context, but it will remind you to use it in your code.

That’s it for the datetime module. Let’s move to the next module dateutil.

Using dateutil

The module dateutil provides extensions to the datetime module. It makes working with dates and times a lot easier with a lot of methods with easy usage. Let’s install the module with the following command.

pip install python-dateutil

The method that we are interested in is dateutil.parser.parse. Let’s see how to convert datetime string to datetime object.

parser.parse

The method parser.parse will take a datetime string and converts it into a respective datetime object format. We don’t need to provide any formatting for this method. It will automatically convert the given datetime string into datetime object. Let’s see an example.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print(parser.parse(string))

If you run the above code, you will see the following output.

2022-12-19 21:37:56

The datetime string must be in a particular format that the parser.parse method accepts. It will throw an error if the datetime string format is not as per its desired format. You can check all the datetime string formats that it accepts for automatic conversions.

As the parser.parse method returns datetime object, we can access the date and time objects separately as we have seen with the datetime module. Let’s see the code.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print("Date:", parser.parse(string).date())
print("Time:", parser.parse(string).time())

You can see the below output if you run the above code.

Date: 2022-12-19
Time: 21:37:56

As you can see dateutil makes it easier to work with the dates and times comparatively. You can explore the module in the docs.

Conclusion

We have used one built-in module and one third-party module to convert the datetime string to a DateTime object. There is another built-in module called time with which we can convert the datetime string to a DateTime object similar to datetime and dateutil modules. Try it yourself. It won’t be hard as you have already done a similar thing with other modules.

There might be more libraries with which we can achieve the same thing. The modules that we have used in thing tutorial are standard and widely used. You can explore more about other modules and pick the best one that suits you.

You may also explore how to calculate time difference in python.

Happy Coding 🙂

Share on:
  • Hafeezul Kareem Shaik
    Author
    Hafeez is a developer and loves to share his knowledge of Python and emerging development languages.

Thanks to our Sponsors

More great readings on Development

Power Your Business

Some of the tools and services to help your business grow.
  • The text-to-speech tool that uses AI to generate realistic human-like voices.

    Try Murf AI
  • Web scraping, residential proxy, proxy manager, web unlocker, search engine crawler, and all you need to collect web data.

    Try Brightdata
  • Monday.com is an all-in-one work OS to help you manage projects, tasks, work, sales, CRM, operations, workflows, and more.

    Try Monday
  • Intruder is an online vulnerability scanner that finds cyber security weaknesses in your infrastructure, to avoid costly data breaches.

    Try Intruder