How to Convert String to Datetime in Python
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 🙂