New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue using datetime with format() #52037
Comments
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' |
sorry, first time posting anything like this: Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on win32 |
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. |
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... |
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. |
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. |
Eric Smith wrote:
Oops. "does NOT belong in the mini-language specification". |
The original bug report is invalid and the documentation issue is a duplicate of bpo-8913. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: