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
Answer from Levon on Stack OverflowVideos
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.
While it seems the question was answered per the OP's request, none of the answers give a good way to get a datetime.date object instead of a datetime.datetime. So for those searching and finding this thread:
datetime.date has no .strptime method; use the one on datetime.datetime instead and then call .date() on it to receive the datetime.date object.
Like so:
>>> from datetime import datetime
>>> datetime.strptime('2014-12-04', '%Y-%m-%d').date()
datetime.date(2014, 12, 4)
You can do that with datetime.strptime()
Example:
>>> from datetime import datetime
>>> datetime.strptime('2012-02-10' , '%Y-%m-%d')
datetime.datetime(2012, 2, 10, 0, 0)
>>> _.isoweekday()
5
You can find the table with all the strptime directive here.
To increment by 2 days if .isweekday() == 6, you can use timedelta():
>>> import datetime
>>> date = datetime.datetime.strptime('2012-02-11' , '%Y-%m-%d')
>>> if date.isoweekday() == 6:
... date += datetime.timedelta(days=2)
...
>>> date
datetime.datetime(2012, 2, 13, 0, 0)
>>> date.strftime('%Y-%m-%d') # if you want a string again
'2012-02-13'
Use the strftime() function of the datetime object:
import datetime
now = datetime.datetime.now()
date_string = now.strftime('%Y-%m-%d')
print(date_string)
Output
'2016-01-26'
Yes, there is already a module to handle this. See
https://docs.python.org/2/library/datetime.html
Specifically,
date.isoformat()
Which Returns a string representing the date in ISO 8601 format, โYYYY-MM-DDโ.
For example, date(2002, 12, 4).isoformat() == '2002-12-04'.
I am trying to convert a date and time formatted as a string to datetime. I've read a few articles and thought this would work but it throws the error below. Can anyone see what the issue is?
Thanks
eg_time = '15 September 2022 19:00' then = datetime.strptime(eg_time, "%d.%m.%y %H:%M")
Error:
Traceback (most recent call last):
File "C:/", line 75, in <module>
then = datetime.strptime(eg_time, "%d.%m.%y %H:%M")
File "C:", line 577, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "C:", line 359, in _strptime
(data_string, format))
ValueError: time data '15 September 2022 19:00' does not match format '%d.%m.%y %H:%M'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
I have a large file with dates. While all the dates are formatted DD MM YYYY, the separators are different: DD/MM/YYYY, DD-MM-YYYY, DD.MM.YYYY, 'DD MM YYYY'.
Today I am using split and if the length is 1 I try another symbol. If all fail I throw an error.
I was wondering whether the datetime package has something to handle this scenario.
Thanks