Skip to content

Python strptime: Converting Strings to DateTime

Python strptime A Guide to Converting Strings to DateTime Cover Image

In this post, you’ll learn how to convert a Python string to a date, using the  datetime module’s strptime function. I’ve been working with Python for years now, and one thing that never ceases to amaze me is the sheer power and flexibility of this language. I’ve used it for everything from web development to data analysis, and today, I want to share my experience with one of the most useful functions when it comes to working with dates and times: the Python strptime() function.

If you’ve ever had to convert a string to a datetime object, you know it can be a bit of a headache. But worry not, because I’m here to guide you through the process with some handy tips and tricks I’ve picked up along the way.

By the end of this tutorial, you’ll have learned the following:

  • The basics of the Python strptime function and how to use it effectively
  • How to specify the correct format for successful string-to-datetime conversion
  • Techniques for handling timezones and milliseconds with strptime

So grab a cup of your favorite beverage, and let’s dive into the world of Python datetime conversion together!

Are you looking to convert a datetime object to a string? Check out how to use the Python strftime function to convert a datetime object to a string.

The Quick Answer: Use datetime’s  strptime  Function to Convert a String to Datetime

from datetime import datetime
date_string = '2021-12-31'
datetime = datetime.strptime(date_string, '%Y-%m-%d')

print(datetime)
# Returns: 2021-12-31 00:00:00

Let’s dive in!

Understanding the Python strptime Function

Python’s datetime module comes with the standard Python library, meaning you don’t need to worry about installing it. The datetime module comes with three main object types: datetime, and datetime.

The Python strptime function is a part of the datetime module, and its purpose is to convert a string representing a date and/or time into a datetime object.

The function requires two arguments:

  1. date_string: The date string you want to convert, and
  2. format: The format string that specifies the expected format of the date string.
# Understanding the Python datetime.strptime() Function
from datetime import datetime
datetime.strptime(date_string, format)
Understanding the Python strptime Function
Understanding the Python strptime Function

Before we dive into some examples, let’s take a look at the most common formatting strings available for use with the strptime function. Here’s a handy table to help you understand the various format codes:

DirectiveMeaningExample
%aWeekday as abbreviated nameSun, Mon, …, Sat
%AWeekday as full nameSunday, Monday, …, Saturday
%wWeekday as a decimal number (0 is Sunday)0, 1, …, 6
%dDay of the month as a zero-padded decimal number01, 02, …, 31
%bMonth as abbreviated nameJan, Feb, …, Dec
%BMonth as full nameJanuary, February, …, December
%mMonth as a zero-padded decimal number01, 02, …, 12
%yYear without century as a zero-padded decimal number00, 01, …, 99
%YYear with century as a decimal number0001, 0002, …, 2013, 2014, …, 9998, 9999
%HHour (24-hour clock) as a zero-padded decimal number00, 01, …, 23
%IHour (12-hour clock) as a zero-padded decimal number01, 02, …, 12
%pLocale’s equivalent of either AM or PMAM, PM
%MMinute as a zero-padded decimal number00, 01, …, 59
%SSecond as a zero-padded decimal number00, 01, …, 59
%fMicrosecond as a decimal number, zero-padded to 6 digits000000, 000001, …, 999999
%zUTC offset in the form ±HHMM[SS[.ffffff]] (empty string if the object is naive)(empty), +0000, -0400, +1030, +063415, -030712.345216
%ZTime zone name (empty string if the object is naive)(empty), UTC, GMT
%jDay of the year as a zero-padded decimal number001, 002, …, 366
%UWeek number of the year (Sunday as the first day of the week) as a zero-padded decimal number00, 01, …, 53
%WWeek number of the year (Monday as the first day of the week) as a zero-padded decimal number00, 01, …, 53
%cLocale’s appropriate date and time representationTue Aug 16 21:30:00 1988
%xLocale’s appropriate date representation08/16/88
%XLocale’s appropriate time representation21:30:00
%%A literal ‘%’ character%
All of the datetime format codes available in Python

Are you looking to convert a Pandas column to datetime? Check out how to use the Pandas to_datetime function which converts an entire column to datetime.

How to Convert a String to datetime in Python

Now that we have a better understanding of the format codes, let’s put the Python strptime function to work! In order to convert a string to datetime in Python, you need to pass in the string and the format code into the strptime() function.

In the examples below, I have provided two different use cases. One that’s a simple string, representing only a date and another that includes time as well.

# How to Convert a String to datetime in Python
from datetime import datetime

# Example 1: Date in format "YYYY-MM-DD"
date_string_1 = "2021-09-01"
format_1 = "%Y-%m-%d"
date_1 = datetime.strptime(date_string_1, format_1)
print(date_1)

# Example 2: Date and time in format "YYYY/MM/DD hh:mm:ss"
date_string_2 = "2021/09/01 14:30:00"
format_2 = "%Y/%m/%d %H:%M:%S"
date_2 = datetime.strptime(date_string_2, format_2)
print(date_2)

# Returns:
# 2021-09-01 00:00:00
# 2021-09-01 14:30:00

We can see how easy it is to format our strings into datetime objects! The format codes makes it very intuitive to convert strings into dates and times.

Remember, specifying the correct format is crucial for successful conversion. If the format doesn’t match the date string, you’ll encounter errors. But don’t worry, as we move forward in this tutorial, we’ll discuss how to troubleshoot and handle such issues.

How to Convert a String to date in Python

In order to convert a string to a date in Python, you can use the .strptime() function and then chain the .date() method onto the resulting datetime object. Because the function generates a datetime object, you need to add an additional step to return only a date.

The benefit of this approach is that you only need to learn one function, rather than two! Let’s take a look at an example, where we’ll convert a string that contains a date and time and return only the date object:

# Convert a String to a Date in Python
from datetime import datetime

# Date and time in format "YYYY/MM/DD hh:mm:ss"
datetime_string = "2023/09/01 14:30:00"
format_string = "%Y/%m/%d %H:%M:%S"

# Convert string to date using strptime
date_obj = datetime.strptime(datetime_string, format_string).date()

print("Time string:", datetime_string)
print("Time object:", date_obj)

# Returns:
# Time string: 2023/09/01 14:30:00
# Time object: 2023-09-01

In the code block above, we first converted the string to a datetime object using the strptime() function. Then, we chained on the .date() method, which returns a date object, containing only the date information.

How to Convert a String to time in Python

Similar to converting a string to a time in Python, you need to first convert the string to a datetime object with the strptime() function, then apply the .time() method to convert the object to a time object.

Let’s take a look at how we can do this by using the same string as an example:

# Convert a String to a Time in Python
from datetime import datetime

# Date and time in format "YYYY/MM/DD hh:mm:ss"
datetime_string = "2023/09/01 14:30:00"
format_string = "%Y/%m/%d %H:%M:%S"

# Convert string to time using strptime
time_obj = datetime.strptime(datetime_string, format_string).time()

print("Time string:", datetime_string)
print("Time object:", time_obj)

# Returns:
# Time string: 2023/09/01 14:30:00
# Time object: 14:30:00

We can see from the code block above that we first converted our string (which contains a date and time) to a datetime object. Then, by applying the .time() method, we were able to convert it to a time object. This process can be quite helpful, since you don’t need to worry about using Python to first strip the text.

Handling Timezones with Python strptime Timezone

Working with timezones can be a bit tricky, but it’s an essential skill to master, especially when dealing with data from different sources or users across the globe. I’ve had my fair share of experiences working on projects where incorrect timezone handling led to inaccurate data analysis and reporting. Trust me, it’s not a situation you want to find yourself in!

To avoid such issues, it’s crucial to understand how to work with timezones using the Python strptime function. By properly handling timezone information during string-to-datetime conversion, you can ensure that your data analysis and manipulation tasks are accurate and reliable, no matter where your data comes from.

Let’s dive into some examples to better understand how to handle timezones with the strptime function:

# Handling Timezones with the Python strptime Function
from datetime import datetime

# Example 1: Date and time with timezone abbreviation
date_string_1 = "2021-09-01 14:30:00 EST"
format_1 = "%Y-%m-%d %H:%M:%S %Z"
date_1 = datetime.strptime(date_string_1, format_1)
print(date_1)

# Example 2: Date and time with timezone offset
date_string_2 = "2021-09-01 14:30:00 -0500"
format_2 = "%Y-%m-%d %H:%M:%S %z"
date_2 = datetime.strptime(date_string_2, format_2)
print(date_2)

# Returns:
# 2021-09-01 14:30:00
# 2021-09-01 14:30:00-05:00

In these examples, we’ve demonstrated how to convert date and time strings that include timezone information into datetime objects.

The first example uses the timezone abbreviation (EST), while the second example uses the timezone offset (-0500). By specifying the correct format codes (%Z for timezone abbreviation and %z for timezone offset), we can successfully convert the strings to datetime objects with their respective timezone information.

In my experience, properly handling timezones is crucial when working with data from international users, IoT devices, or any scenario where timestamps are recorded in different timezones. By mastering the strptime function and its usage with timezones, you’ll be well-equipped to tackle any timezone-related challenges that come your way.

How to Fix: ValueError: time data does not match format

One of the most common errors you’ll encounter when working with the Python strptime() function is a ValueError. This error will indicate that the time data does not match the format. Let’s take a look at how and when this error appears:

# Raising a ValueError
from datetime import datetime

datetime_string = "2021/09/01 14:30:00"
datetime_obj = datetime.strptime(datetime_string, '%Y-%m')

# Raises:
# ValueError: time data '2021/09/01 14:30:00' does not match format '%Y-%m'

In the example above, we passed in a format string that didn’t match the formatting of the string. Because of this, Python can’t infer how to read the string into a datetime object.

In order to fix this error, you can fix the format string. In this case, we need to use the following format string to prevent the error: "%Y-%m-%d %H:%M:%S".

Working with Milliseconds Using Python strptime Milliseconds

In some cases, you might need to work with date and time data that includes milliseconds. This level of precision can be crucial in certain applications, such as high-frequency trading, scientific experiments, or performance analysis. I’ve personally encountered situations where milliseconds played a vital role in understanding the finer details of data. This is especially true when working with IoT devices, that you’ll often encounter when working in particular industries.

Let’s see how to handle milliseconds when using the strptime function with a code example:

# Working with Milliseconds in Python
from datetime import datetime

# Example: Date and time with milliseconds in format "YYYY-MM-DD hh:mm:ss.fff"
date_string = "2023-09-01 14:30:00.123"
date_format = "%Y-%m-%d %H:%M:%S.%f"

# Convert string to datetime using strptime
date_obj = datetime.strptime(date_string, date_format)

print("Date string with milliseconds:", date_string)
print("Datetime object with milliseconds:", date_obj)

# Returns:
# Date string with milliseconds: 2023-09-01 14:30:00.123
# Datetime object with milliseconds: 2023-09-01 14:30:00.123000

In this example, we have a date and time string that includes milliseconds. To handle this, we add the %f format code to our date format string, which represents microseconds. Since the strptime function supports up to microsecond precision, it will automatically adjust the milliseconds value accordingly.

Now you know how to work with milliseconds using the strptime function, allowing you to handle even more precise date and time data in your projects.

Frequently Asked Questions

How do I convert a string to a datetime in Python?

To convert a string to a datetime in Python, you can use the strptime function from the datetime module. First, import the datetime module, then call the strptime function with the date string and the corresponding format string as arguments. The format string should match the format of the date string.

How to convert a string in the format “yyyy mm dd” to a datetime object in Python?

To convert a string in the format “yyyy mm dd” to a datetime object in Python, use the strptime function from the datetime module. First, import the datetime module, then call the strptime function with the date string and the format string “%Y %m %d” as arguments. This will return a datetime object representing the given date string.

Can I use the strptime function to convert strings with timezone information?

Yes, you can use the strptime function to convert strings with timezone information. To do this, include the appropriate format codes in your format string, such as %Z for timezone abbreviation (such as EST) or %z for timezone offset (such as -0500). The strptime function will then convert the date and time string, including the timezone information, into a datetime object.

How can I handle milliseconds when using the strptime function?

To handle milliseconds when using the strptime function, include the %f format code in your format string. The %f format code represents microseconds, but since the strptime function supports up to microsecond precision, it will automatically adjust the milliseconds value accordingly when converting the date and time string.

Additional Resources

To learn more about related topics, check out the tutorials below:

Conclusion

We’ve covered a lot of ground in this tutorial, and I hope you now feel more confident in using the Python strptime function to convert strings to datetime objects. We started by understanding the basics of the strptime function and its syntax.

We then explored various examples demonstrating how to convert strings with different date and time formats, including handling timezones and milliseconds. We also covered off how to prevent the ValueError that may come up when working with the strptime function.

As you move forward in your Python journey, I encourage you to keep practicing and experimenting with the strptime function. Remember, mastering this function will not only help you convert strings to datetime objects efficiently but also ensure that your data analysis and manipulation tasks are accurate and reliable. Keep up the great work, and happy coding!

To learn more about the Python strptime function, check out the official documentation.

Nik Piepenbreier

Nik is the author of datagy.io and has over a decade of experience working with data analytics, data science, and Python. He specializes in teaching developers how to use Python for data science using hands-on tutorials.View Author posts

6 thoughts on “Python strptime: Converting Strings to DateTime”

  1. Pingback: DateTime in Pandas and Python • datagy

  2. please correct the mistake, swap %y and %Y

    correct stuff is
    %Y: year without century (e.g., 2021)
    %y: year with century (e.g., 21)

Leave a Reply

Your email address will not be published. Required fields are marked *