Issue 7789: Issue using datetime with format() (original) (raw)

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:56 admin set github: 52037
2010-10-04 14:15:09 belopolsky set status: open -> closed
2010-10-04 14:14:57 belopolsky set nosy: + belopolskymessages: + resolution: duplicatesuperseder: Document that datetime.__format__ is datetime.strftime
2010-01-27 01:05:27 eric.smith set assignee: eric.smith -> georg.brandlnosy: + georg.brandl
2010-01-26 20:06:27 eric.smith set messages: +
2010-01-26 20:05:17 eric.smith set messages: +
2010-01-26 19:57:09 eric.smith set messages: +
2010-01-26 19:52:23 r.david.murray set nosy: + r.david.murraymessages: + versions: + Python 2.7, Python 3.2
2010-01-26 19:44:01 eric.smith set nosy: + eric.smithmessages: + assignee: eric.smithcomponents: + Documentation, - Library (Lib)stage: test needed ->
2010-01-26 19:42:04 JordanS set messages: +
2010-01-26 19:24:04 brian.curtin set priority: normalcomponents: + Library (Lib), - 2to3 (2.x to 3.x conversion tool)stage: test needed
2010-01-26 19:21:56 JordanS create