How do i convert string to datetime in python am pm?

Specifically I have code that simplifies to this:

from datetime import datetime
date_string = '2009-11-29 03:17 PM'
format = '%Y-%m-%d %H:%M %p'
my_date = datetime.strptime[date_string, format]

# This prints '2009-11-29 03:17 AM'
print my_date.strftime[format]

What gives? Does Python just ignore the period specifier when parsing dates or am I doing something stupid?

ARK

7196 silver badges20 bronze badges

asked Nov 18, 2009 at 22:04

Kenan BanksKenan Banks

201k34 gold badges151 silver badges171 bronze badges

0

The Python time.strftime docs say:

When used with the strptime[] function, the %p directive only affects the output hour field if the %I directive is used to parse the hour.

Sure enough, changing your %H to %I makes it work.

MattDMo

97.9k20 gold badges235 silver badges228 bronze badges

answered Nov 18, 2009 at 22:07

Ned BatchelderNed Batchelder

351k71 gold badges552 silver badges649 bronze badges

3

format = '%Y-%m-%d %H:%M %p'

The format is using %H instead of %I. Since %H is the "24-hour" format, it's likely just discarding the %p information. It works just fine if you change the %H to %I.

answered Nov 18, 2009 at 22:09

You used %H [24 hour format] instead of %I [12 hour format].

answered Nov 18, 2009 at 22:09

Tim PietzckerTim Pietzcker

318k56 gold badges494 silver badges550 bronze badges

Try replacing %H [Hour on a 24-hour clock] with %I [Hour on a 12-hour clock] ?

answered Nov 18, 2009 at 22:08

keithjgrantkeithjgrant

12.1k5 gold badges51 silver badges87 bronze badges

>>> from datetime import datetime
>>> print[datetime.today[].strftime["%H:%M %p"]]
15:31 AM

Try replacing %I with %H.

answered Nov 4, 2020 at 14:04

1

We can convert a string to datetime using strptime[] function. This function is available in datetime and time modules to parse a string to datetime and time objects respectively.

Python strptime[]

Python strptime[] is a class method in datetime class. Its syntax is:

datetime.strptime[date_string, format]

Both the arguments are mandatory and should be string. This function is exactly opposite of strftime[] function, which converts datetime object to a string. We have the similar function available in time module too, where its syntax is:

time.strptime[time_string[, format]]

Here the function returns struct_time object. If format string is not provided, it defaults to “%a %b %d %H:%M:%S %Y” which matches the formatting returned by ctime[] function. If the input string cannot be parsed according to the provided format, then ValueError is raised. The exception message provides clear details about the issue in parsing.

Python strptime[] format directives

Following table contains most of the commonly used format directives.

DirectiveDescriptionExample Output
%a Weekday as locale’s abbreviated name. Sun, Mon, …, Sat [en_US] So, Mo, …, Sa [de_DE]
%A Weekday as locale’s full name. Sunday, Monday, …, Saturday [en_US] Sonntag, Montag, …, Samstag [de_DE]
%w Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. 0, 1, 2, 3, 4, 5, 6
%d Day of the month as a zero-padded decimal number. 01, 02, …, 31
%b Month as locale’s abbreviated name. Jan, Feb, …, Dec [en_US] Jan, Feb, …, Dez [de_DE]
%B Month as locale’s full name. January, February, …, December [en_US] Januar, Februar, …, Dezember [de_DE]
%m Month as a zero-padded decimal number. 01, 02 … 12
%y Year without century as a zero-padded decimal number. 01, 02, … 99
%Y Year with century as a decimal number. 0001, 0002, … , 9999
%H Hour [24-hour clock] as a zero-padded decimal number. 01, 02, … , 23
%I Hour [12-hour clock] as a zero-padded decimal number. 01, 02, … , 12
%p Locale’s equivalent of either AM or PM. AM, PM [en_US] am, pm [de_DE]
%M Minute as a zero-padded decimal number. 01, 02, … , 59
%S Second as a zero-padded decimal number. 01, 02, … , 59
%f Microsecond as a decimal number, zero-padded on the left. 000000, 000001, …, 999999 Not applicable with time module.
%z UTC offset in the form ±HHMM[SS] [empty string if the object is naive]. [empty], +0000, -0400, +1030
%Z Time zone name [empty string if the object is naive]. [empty], UTC, IST, CST
%j Day of the year as a zero-padded decimal number. 001, 002, …, 366
%U Week number of the year [Sunday as the first day of the week] as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0. 00, 01, …, 53
%W Week number of the year [Monday as the first day of the week] as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0. 00, 01, …, 53
%c Locale’s appropriate date and time representation. Tue Aug 16 21:30:00 1988 [en_US] Di 16 Aug 21:30:00 1988 [de_DE]
%x Locale’s appropriate date representation. 08/16/88 [None] 08/16/1988 [en_US] 16.08.1988 [de_DE]
%X Locale’s appropriate time representation. 21:30:00 [en_US] 21:30:00 [de_DE]
%% A literal ‘%’ character. %

Python strptime[] examples

Let’s look into some specific examples of strptime[] function to convert string to datetime and time objects.

String to datetime

from datetime import datetime

datetime_str = '09/19/18 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

Output:


2018-09-19 13:55:26

String to date object

We can use date[] function alongwith strptime[] function to convert string to date object.

date_str = '09-19-2018'

date_object = datetime.strptime[date_str, '%m-%d-%Y'].date[]
print[type[date_object]]
print[date_object]  # printed in default formatting

Output:


2018-09-19

String to time object

We can use time[] function alongwith strptime[] function to convert string to time object.

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

Output:


13:55:26

Python time strptime[] example

Let’s see some examples of using time module strptime[] function.

import time

time_obj = time.strptime[time_str, '%H::%M::%S']
print[type[time_obj]]
print[time_obj]

# default formatting - "%a %b %d %H:%M:%S %Y"
print[time.strptime['Wed Sep 19 14:55:02 2018']]

Output:


time.struct_time[tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=13, tm_min=55, tm_sec=26, tm_wday=0, tm_yday=1, tm_isdst=-1]
time.struct_time[tm_year=2018, tm_mon=9, tm_mday=19, tm_hour=14, tm_min=55, tm_sec=2, tm_wday=2, tm_yday=262, tm_isdst=-1]

Python strptime[] ValueError Example

We can use try-except block to catch parsing exception and perform corrective actions.

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

try:
    datetime_object = datetime.strptime[datetime_str, '%m/%d/%y']
except ValueError as ve:
    print['ValueError Raised:', ve]

time_str = '99::55::26'

try:
    time_object = time.strptime[time_str, '%H::%M::%S']
except ValueError as e:
    print['ValueError:', e]

Output:

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

Notice that the ValueError message clearly explains the root cause of the parsing exception.

Python Convert String to Datetime with locale

Let’s look at an example where a locale-specific string will be converted to datetime object. We will use locale module to set the locale to be used by python.

import locale

locale.setlocale[locale.LC_ALL, 'de_DE']
date_str_de_DE = '10-Dezember-2018 Montag'  # de_DE locale
datetime_object = datetime.strptime[date_str_de_DE, '%d-%B-%Y %A']
print[datetime_object]

Output: 2018-12-10 00:00:00

You can checkout complete python script and more Python examples from our GitHub Repository.

References: datetime strptime[], time strptime[]

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

We can convert a string to datetime using strptime[] function. This function is available in datetime and time modules to parse a string to datetime and time objects respectively.

How do you get AM or PM in Python?

strftime[] to format this struct_time into a string of your desired 12-hour format. %I is a directive that tells Python to give the hour in the 12-hour format. Additionally, you may include the %p directive which will display “AM” or “PM”. Hope this answered your question!

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

Import the datetime library. Use the datetime. datetime class to handle date and time combinations. Use the strptime method to convert a string datetime to a object datetime.

How do you convert AM pm to military time in Python?

how to convert a am pm string to 24 hrs time python.
>>> from datetime import *.
>>> m2 = '1:35 PM'.
>>> m2 = datetime. strptime[m2, '%I:%M %p'].
>>> print[m2].
1900-01-01 13:35:00..

Chủ Đề