This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Issue using datetime with format()
Type: behavior Stage:
Components: Documentation Versions: Python 3.1, Python 3.2, Python 2.7, Python 2.6
process
Status: closed Resolution: duplicate
Dependencies: Superseder: Document that datetime.__format__ is datetime.strftime
View: 8913
Assigned To: georg.brandl Nosy List: JordanS, belopolsky, eric.smith, georg.brandl, r.david.murray
Priority: normal Keywords:

Created on 2010-01-26 19:21 by JordanS, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (8)
msg98358 - (view) Author: JordanS (JordanS) Date: 2010-01-26 19:21
format() cannot handle datetime.DateTime objects, returns the format_spec instead, without applying formatting to it, perhaps default behaviour in case of unknown type. Different modifications, ie: using str.format() syntax produce same behaviour.

Sample code: 

import datetime

#data
row = {0: 1, 'BeamId': 218, 2: 0.0, 3: 0.0, 4: datetime.datetime(2006, 7, 18, 0, 12), 5: datetime.datetime(2007, 2, 23, 18, 26, 55, 450000), 6: 32637.774406455803, 1: 218, 'DateAndTime': datetime.datetime(2007, 2, 23, 18, 26, 55, 450000), 'AvgFlexuralStrengthDown': 32637.774406455803, 'WarmUpTime': datetime.datetime(2006, 7, 18, 0, 12), 'AvgFlexuralStrengthUp': 15916.5463146028, 'IceSheetId': 1, 'Y': 0.0, 'X': 0.0, 7: 15916.5463146028}

titles = ['BeamId', 'DateAndTime', 'AvgFlexuralStrengthDown', 'WarmUpTime', 'AvgFlexuralStrengthUp', 'IceSheetId', 'Y', 'X']

#attempt to print datetime: ignores formatting, doesn't print datetime value, prints format_spec instead
for key in titles:
    asLine = "{0:*<30}".format(row[key])
    print(asLine),
print '\n'

#prints a repr of datetime
for key in titles:
    asLine = "{0!r:*<30}".format(row[key])
    print(asLine),
print '\n'

#prints datetime as string
for key in titles:
    asLine = "{0!s:*<30}".format(row[key])
    print(asLine),
print '\n'
msg98362 - (view) Author: JordanS (JordanS) Date: 2010-01-26 19:42
sorry, first time posting anything like this: 
versions:

Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on win32
msg98363 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2010-01-26 19:44
datetime.datetime passes its format string to strftime:

>>> import datetime
>>> x = datetime.datetime(2001, 1, 2, 3, 4)
>>> x.strftime('%Y-%m-%d')
'2001-01-02'
>>> '{0:%Y-%m-%d}'.format(x)
'2001-01-02'

I'll check to make sure this is documented.
msg98365 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2010-01-26 19:52
If it is, it isn't any place obvious.  I thought I remembered something about using strftime strings in format, but when I looked in the docs for datetime and the section on the format mini language I couldn't find it, so I ended up doing '{} ...'.format(x.strftime("...") in my code...
msg98367 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2010-01-26 19:57
I don't think this is documented (that I can find, at least), so I'll assign it to Georg.

I think the correct thing to do is something like this, in the datetime, date, and time object descriptions:

date.__format__(fmt)
    For a date d, format(d, fmt) is equivalent to d.strftime(fmt).

Ditto for date.__format__. But maybe there's a better, more obvious place to document this.
msg98369 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2010-01-26 20:05
The documentation for this belongs in the mini-language specification, since that just address built-in types. Each type can define its own format specification language.

So I think adding documentation of __format__ to each non-builtin type that implements __format__ is probably the best way to go.
msg98370 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2010-01-26 20:06
Eric Smith wrote:
> The documentation for this belongs in the mini-language specification, ...

Oops. "does NOT belong in the mini-language specification".
msg117949 - (view) Author: Alexander Belopolsky (belopolsky) * (Python committer) Date: 2010-10-04 14:14
The original bug report is invalid and the documentation issue is a duplicate of #8913.
History
Date User Action Args
2022-04-11 14:56:56adminsetgithub: 52037
2010-10-04 14:15:09belopolskysetstatus: open -> closed
2010-10-04 14:14:57belopolskysetnosy: + belopolsky
messages: + msg117949
resolution: duplicate

superseder: Document that datetime.__format__ is datetime.strftime
2010-01-27 01:05:27eric.smithsetassignee: eric.smith -> georg.brandl

nosy: + georg.brandl
2010-01-26 20:06:27eric.smithsetmessages: + msg98370
2010-01-26 20:05:17eric.smithsetmessages: + msg98369
2010-01-26 19:57:09eric.smithsetmessages: + msg98367
2010-01-26 19:52:23r.david.murraysetnosy: + r.david.murray

messages: + msg98365
versions: + Python 2.7, Python 3.2
2010-01-26 19:44:01eric.smithsetnosy: + eric.smith
messages: + msg98363

assignee: eric.smith
components: + Documentation, - Library (Lib)
stage: test needed ->
2010-01-26 19:42:04JordanSsetmessages: + msg98362
2010-01-26 19:24:04brian.curtinsetpriority: normal
components: + Library (Lib), - 2to3 (2.x to 3.x conversion tool)
stage: test needed
2010-01-26 19:21:56JordanScreate