mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Fixes #1395: extends pelican.utils.strftime with - prefix to strip leading zeros
Adds the ability to use `-` prefix with C89 format codes to strip any leading zeros.
This commit is contained in:
parent
a3c8fca1db
commit
7c3cc8fc0d
3 changed files with 33 additions and 5 deletions
|
|
@ -342,8 +342,12 @@ Date format and locale
|
|||
If no ``DATE_FORMATS`` are set, Pelican will fall back to
|
||||
``DEFAULT_DATE_FORMAT``. If you need to maintain multiple languages with
|
||||
different date formats, you can set the ``DATE_FORMATS`` dictionary using the
|
||||
language name (``lang`` metadata in your post content) as the key. Regarding
|
||||
available format codes, see `strftime document of python`_ :
|
||||
language name (``lang`` metadata in your post content) as the key.
|
||||
|
||||
In addition to the standard C89 strftime format codes that are listed in
|
||||
`Python strftime documentation`_, you can use ``-`` character between ``%`` and
|
||||
the format character to remove any leading zeros. For example, ``%d/%m/%Y`` will
|
||||
output ``01/01/2014`` whereas ``%-d/%-m/%Y`` will result in ``1/1/2014``.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
|
|
@ -382,7 +386,7 @@ can get a list of available locales via the ``locale -a`` command; see manpage
|
|||
`locale(1)`_ for more information.
|
||||
|
||||
|
||||
.. _strftime document of python: http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
.. _Python strftime documentation: http://docs.python.org/library/datetime.html#strftime-strptime-behavior
|
||||
|
||||
.. _locales on Windows: http://msdn.microsoft.com/en-us/library/cdax410z%28VS.71%29.aspx
|
||||
|
||||
|
|
|
|||
|
|
@ -280,6 +280,13 @@ class TestUtils(LoggedTestCase):
|
|||
self.assertEqual(utils.strftime(d, '%d/%m/%Y Øl trinken beim Besäufnis'),
|
||||
'29/08/2012 Øl trinken beim Besäufnis')
|
||||
|
||||
# alternative formatting options
|
||||
self.assertEqual(utils.strftime(d, '%-d/%-m/%y'), '29/8/12')
|
||||
self.assertEqual(utils.strftime(d, '%-H:%-M:%-S'), '0:0:0')
|
||||
|
||||
d = utils.SafeDatetime(2012, 8, 9)
|
||||
self.assertEqual(utils.strftime(d, '%-d/%-m/%y'), '9/8/12')
|
||||
|
||||
|
||||
# test the output of utils.strftime in a different locale
|
||||
# Turkish locale
|
||||
|
|
|
|||
|
|
@ -42,8 +42,11 @@ def strftime(date, date_format):
|
|||
replacing formatted output back.
|
||||
'''
|
||||
|
||||
c89_directives = 'aAbBcdfHIjmMpSUwWxXyYzZ%'
|
||||
strip_zeros = lambda x: x.lstrip('0') or '0'
|
||||
|
||||
# grab candidate format options
|
||||
format_options = '%.'
|
||||
format_options = '%[-]?.'
|
||||
candidates = re.findall(format_options, date_format)
|
||||
|
||||
# replace candidates with placeholders for later % formatting
|
||||
|
|
@ -56,14 +59,28 @@ def strftime(date, date_format):
|
|||
formatted_candidates = []
|
||||
for candidate in candidates:
|
||||
# test for valid C89 directives only
|
||||
if candidate[1] in 'aAbBcdfHIjmMpSUwWxXyYzZ%':
|
||||
if candidate[-1] in c89_directives:
|
||||
# check for '-' prefix
|
||||
if len(candidate) == 3:
|
||||
# '-' prefix
|
||||
candidate = '%{}'.format(candidate[-1])
|
||||
conversion = strip_zeros
|
||||
else:
|
||||
conversion = None
|
||||
|
||||
# format date
|
||||
if isinstance(date, SafeDatetime):
|
||||
formatted = date.strftime(candidate, safe=False)
|
||||
else:
|
||||
formatted = date.strftime(candidate)
|
||||
|
||||
# convert Py2 result to unicode
|
||||
if not six.PY3 and enc is not None:
|
||||
formatted = formatted.decode(enc)
|
||||
|
||||
# strip zeros if '-' prefix is used
|
||||
if conversion:
|
||||
formatted = conversion(formatted)
|
||||
else:
|
||||
formatted = candidate
|
||||
formatted_candidates.append(formatted)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue