datetime.strptime parses an input string in the user-specified format into a timezone-naive datetime object:
>>> from datetime import datetime
>>> datetime.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
datetime.datetime(2005, 6, 1, 13, 33)
To obtain a date object using an existing datetime object, convert it using .date():
>>> datetime.strptime('Jun 1 2005', '%b %d %Y').date()
date(2005, 6, 1)
Links:
strptimedocs: Python 2, Python 3strptime/strftimeformat string docs: Python 2, Python 3strftime.org format string cheatsheet
Notes:
strptime= "string parse time"strftime= "string format time"
Videos
datetime.strptime parses an input string in the user-specified format into a timezone-naive datetime object:
>>> from datetime import datetime
>>> datetime.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
datetime.datetime(2005, 6, 1, 13, 33)
To obtain a date object using an existing datetime object, convert it using .date():
>>> datetime.strptime('Jun 1 2005', '%b %d %Y').date()
date(2005, 6, 1)
Links:
strptimedocs: Python 2, Python 3strptime/strftimeformat string docs: Python 2, Python 3strftime.org format string cheatsheet
Notes:
strptime= "string parse time"strftime= "string format time"
Use the third-party dateutil library:
from dateutil import parser
parser.parse("Aug 28 1999 12:00AM") # datetime.datetime(1999, 8, 28, 0, 0)
It can handle most date formats and is more convenient than strptime since it usually guesses the correct format. It is also very useful for writing tests, where readability is more important than performance.
Install it with:
pip install python-dateutil
You can use strftime to help you format your date.
E.g.,
import datetime
t = datetime.datetime(2012, 2, 23, 0, 0)
t.strftime('%m/%d/%Y')
will yield:
'02/23/2012'
More information about formatting see here
date and datetime objects (and time as well) support a mini-language to specify output, and there are two ways to access it:
- direct method call:
dt.strftime('format here') - format method (python 2.6+):
'{:format here}'.format(dt) - f-strings (python 3.6+):
f'{dt:format here}'
So your example could look like:
dt.strftime('The date is %b %d, %Y')'The date is {:%b %d, %Y}'.format(dt)f'The date is {dt:%b %d, %Y}'
In all three cases the output is:
The date is Feb 23, 2012
For completeness' sake: you can also directly access the attributes of the object, but then you only get the numbers:
'The date is %s/%s/%s' % (dt.month, dt.day, dt.year)
# The date is 02/23/2012
The time taken to learn the mini-language is worth it.
For reference, here are the codes used in the mini-language:
%aWeekday as locale’s abbreviated name.%AWeekday as locale’s full name.%wWeekday as a decimal number, where 0 is Sunday and 6 is Saturday.%dDay of the month as a zero-padded decimal number.%bMonth as locale’s abbreviated name.%BMonth as locale’s full name.%mMonth as a zero-padded decimal number. 01, ..., 12%yYear without century as a zero-padded decimal number. 00, ..., 99%YYear with century as a decimal number. 1970, 1988, 2001, 2013%HHour (24-hour clock) as a zero-padded decimal number. 00, ..., 23%IHour (12-hour clock) as a zero-padded decimal number. 01, ..., 12%pLocale’s equivalent of either AM or PM.%MMinute as a zero-padded decimal number. 00, ..., 59%SSecond as a zero-padded decimal number. 00, ..., 59%fMicrosecond as a decimal number, zero-padded on the left. 000000, ..., 999999%zUTC offset in the form +HHMM or -HHMM (empty if naive), +0000, -0400, +1030%ZTime zone name (empty if naive), UTC, EST, CST%jDay of the year as a zero-padded decimal number. 001, ..., 366%UWeek number of the year (Sunday is the first) as a zero padded decimal number.%WWeek number of the year (Monday is first) as a decimal number.%cLocale’s appropriate date and time representation.%xLocale’s appropriate date representation.%XLocale’s appropriate time representation.%%A literal '%' character.