You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
datetime/date strftime() method and time.strftime() inconsistency #47031
datetime and date strftime() method does additional check on input
format, thus being completely different from time's module
time.strftime() method behavior.
There are two ways to fix this:
Add an explicit note about this behavior (e.g., "only 'str' objects
are allowed for format strings") in docs (section 5.1.7).
Allow 'unicode' objects for format strings (backport time.strftime()
from 3.0?).
Here is a traceback for a more complete overview:
Python 2.6a2+ (trunk:62762, May 6 2008, 14:37:27)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime, date
>>> import time
>>> uformat =u'%Y-%m-%D %H-%M-%S'
>>> format='%Y-%m-%D %H-%M-%S'
>>> datetime.today().strftime(uformat)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: strftime() argument 1 must be str, not unicode
>>> datetime.today().strftime(format)
'2008-05-05/07/08 17-19-03'
>>> time.strftime(uformat)
'2008-05-05/07/08 17-19-10'
>>> time.strftime(format)
'2008-05-05/07/08 17-19-16'
>>> date.today()
datetime.date(2008, 5, 7)
>>> date.today().strftime(format)
'2008-05-05/07/08 00-00-00'
>>> date.today().strftime(uformat)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: strftime() argument 1 must be str, not unicode
But should time.strftime allow a unicode format string as input in the
first place? For backwards compatibility I'd say yes. But.. Sane
output can not be guaranteed from time.strftime when given a unicode
format string if it contains multibyte characters that happen to have a
valid (bytewise) % format code in them within a multibyte character.
Anyways the output is always byte string without a specified encoding so
giving it actual unicode characters as input is not advised (at least in
2.6, i didn't check 3.0).
Activity
mishok13 commentedon May 7, 2008
datetime and date strftime() method does additional check on input
format, thus being completely different from time's module
time.strftime() method behavior.
There are two ways to fix this:
are allowed for format strings") in docs (section 5.1.7).
from 3.0?).
Here is a traceback for a more complete overview:
gpshead commentedon May 25, 2008
Yes, sounds like a bug. I'll fix it.
But should time.strftime allow a unicode format string as input in the
first place? For backwards compatibility I'd say yes. But.. Sane
output can not be guaranteed from time.strftime when given a unicode
format string if it contains multibyte characters that happen to have a
valid (bytewise) % format code in them within a multibyte character.
Anyways the output is always byte string without a specified encoding so
giving it actual unicode characters as input is not advised (at least in
2.6, i didn't check 3.0).
there's an amusing comment in Modules/datetimemodule.c:
/* I sure don't want to reproduce the strftime code from the time module,
...
*/
static PyObject * wrap_strftime(
gpshead commentedon Jun 2, 2008
Fixed in trunk (2.6) r63887.