Issue2782
➜
This issue tracker will soon become read-only and move to GitHub.
For a smoother transition, remember to
log in and link your GitHub username to your profile.
For more information,
see this post about the migration.
Created on 2008-05-07 14:45 by mishok13, last changed 2008-06-02 04:11 by gregory.p.smith. This issue is now closed.
| Messages (3) | |||
|---|---|---|---|
| msg66360 - (view) | Author: Andrii V. Mishkovskyi (mishok13) | Date: 2008-05-07 14:45 | |
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: 1. Add an explicit note about this behavior (e.g., "only 'str' objects are allowed for format strings") in docs (section 5.1.7). 2. 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 |
|||
| msg67332 - (view) | Author: Gregory P. Smith (gregory.p.smith) * | Date: 2008-05-25 08:54 | |
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, * so this imports the module and calls it. All the hair is due to * giving special meanings to the %z, %Z and %f format codes via a * preprocessing step on the format string. ... */ static PyObject * wrap_strftime( |
|||
| msg67627 - (view) | Author: Gregory P. Smith (gregory.p.smith) * | Date: 2008-06-02 04:11 | |
Fixed in trunk (2.6) r63887. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2008-06-02 04:11:59 | gregory.p.smith | set | status: open -> closed assignee: gregory.p.smith -> resolution: fixed messages: + msg67627 versions: - Python 2.6 |
| 2008-05-25 08:54:45 | gregory.p.smith | set | priority: normal assignee: gregory.p.smith messages: + msg67332 nosy: + gregory.p.smith |
| 2008-05-10 05:03:24 | shura_zam | set | nosy: + shura_zam |
| 2008-05-09 18:11:02 | sbj3 | set | nosy: + sbj3 |
| 2008-05-07 14:45:42 | mishok13 | create | |