Edgewall Software

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.

Change History (0)

Note: See TracTickets for help on using tickets.