Opened 10 years ago
Last modified 10 years ago
#11366 closed enhancement
More flexible parse_date without Babel — at Initial Version
Reported by: | Jun Omae | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | 1.0.2 |
Component: | i18n | Version: | 1.0-stable |
Severity: | normal | Keywords: | |
Cc: | Branch: | ||
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description
If Babel isn't installed, parse_date
parses input using time.strptime
. But strptime
is a function from libc and not flexible. Especially, if CJK environment, it cannot parse formatted text using format_datetime
.
>>> from locale import setlocale, LC_ALL >>> setlocale(LC_ALL, 'ja_JP.UTF8') 'ja_JP.UTF8' >>> from trac.util.datefmt import parse_date, localtz, format_datetime, get_datetime_format_hint >>> from datetime import datetime >>> t = datetime.now(localtz) >>> text = format_datetime(t, locale=None) >>> print text 2013年11月15日 12時40分14秒 >>> parse_date(text, locale=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/jun66j5/venv/trac/1.0.1/lib/python2.5/site-packages/trac/util/datefmt.py", line 466, in parse_date date=text, hint=hint), _('Invalid Date')) trac.core.TracError>>>
Even if non-CJK environment, the function isn't flexible.
>>> setlocale(LC_ALL, 'en_US.UTF8') 'en_US.UTF8' >>> get_datetime_format_hint(locale=None) u'MM/DD/YYYY hh:mm:ss a' >>> parse_date('11/15, 2013 13:10', locale=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/jun66j5/venv/trac/1.0.1/lib/python2.5/site-packages/trac/util/datefmt.py", line 466, in parse_date date=text, hint=hint), _('Invalid Date')) trac.core.TracError: "11/15, 2013 13:10" is an invalid date, or the date format is not known. Try "MM/DD/YYYY" instead. >>> parse_date('11/15/2013 13:10', locale=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/jun66j5/venv/trac/1.0.1/lib/python2.5/site-packages/trac/util/datefmt.py", line 466, in parse_date date=text, hint=hint), _('Invalid Date')) trac.core.TracError: "11/15/2013 13:10" is an invalid date, or the date format is not known. Try "MM/DD/YYYY" instead. >>> parse_date('11/15/2013 13:10:42', locale=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/jun66j5/venv/trac/1.0.1/lib/python2.5/site-packages/trac/util/datefmt.py", line 466, in parse_date date=text, hint=hint), _('Invalid Date')) trac.core.TracError: "11/15/2013 13:10:42" is an invalid date, or the date format is not known. Try "MM/DD/YYYY" instead. >>> parse_date('11/15/2013 13:10:42 PM', locale=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/jun66j5/venv/trac/1.0.1/lib/python2.5/site-packages/trac/util/datefmt.py", line 466, in parse_date date=text, hint=hint), _('Invalid Date')) trac.core.TracError: "11/15/2013 13:10:42 PM" is an invalid date, or the date format is not known. Try "MM/DD/YYYY" instead. >>> parse_date('Nov/15/2013 1:10:42 PM', locale=None) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/jun66j5/venv/trac/1.0.1/lib/python2.5/site-packages/trac/util/datefmt.py", line 466, in parse_date date=text, hint=hint), _('Invalid Date')) trac.core.TracError: "Nov/15/2013 1:10:42 PM" is an invalid date, or the date format is not known. Try "MM/DD/YYYY" instead.
The parse_date
function should be more flexible even without Babel.
Note:
See TracTickets
for help on using tickets.