Fixed #16416 -- Added two new date formatting options for timezones and ISO week numbers. Thanks, poirier.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17473 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
e445b66fd8
commit
a6b6c6e171
|
@ -22,7 +22,7 @@ from django.utils.translation import ugettext as _
|
||||||
from django.utils.encoding import force_unicode
|
from django.utils.encoding import force_unicode
|
||||||
from django.utils.timezone import is_aware, is_naive
|
from django.utils.timezone import is_aware, is_naive
|
||||||
|
|
||||||
re_formatchars = re.compile(r'(?<!\\)([aAbBcdDEfFgGhHiIjlLmMnNOPrsStTUuwWyYzZ])')
|
re_formatchars = re.compile(r'(?<!\\)([aAbBcdDeEfFgGhHiIjlLmMnNoOPrsStTUuwWyYzZ])')
|
||||||
re_escaped = re.compile(r'\\(.)')
|
re_escaped = re.compile(r'\\(.)')
|
||||||
|
|
||||||
class Formatter(object):
|
class Formatter(object):
|
||||||
|
@ -144,6 +144,17 @@ class DateFormat(TimeFormat):
|
||||||
"Day of the week, textual, 3 letters; e.g. 'Fri'"
|
"Day of the week, textual, 3 letters; e.g. 'Fri'"
|
||||||
return WEEKDAYS_ABBR[self.data.weekday()]
|
return WEEKDAYS_ABBR[self.data.weekday()]
|
||||||
|
|
||||||
|
def e(self):
|
||||||
|
"Timezone name if available"
|
||||||
|
try:
|
||||||
|
if self.data.tzinfo:
|
||||||
|
# Have to use tzinfo.tzname and not datetime.tzname
|
||||||
|
# because datatime.tzname does not expect Unicode
|
||||||
|
return self.data.tzinfo.tzname(self.data) or ""
|
||||||
|
except NotImplementedError:
|
||||||
|
pass
|
||||||
|
return ""
|
||||||
|
|
||||||
def E(self):
|
def E(self):
|
||||||
"Alternative month names as required by some locales. Proprietary extension."
|
"Alternative month names as required by some locales. Proprietary extension."
|
||||||
return MONTHS_ALT[self.data.month]
|
return MONTHS_ALT[self.data.month]
|
||||||
|
@ -187,6 +198,10 @@ class DateFormat(TimeFormat):
|
||||||
"Month abbreviation in Associated Press style. Proprietary extension."
|
"Month abbreviation in Associated Press style. Proprietary extension."
|
||||||
return MONTHS_AP[self.data.month]
|
return MONTHS_AP[self.data.month]
|
||||||
|
|
||||||
|
def o(self):
|
||||||
|
"ISO 8601 year number matching the ISO week number (W)"
|
||||||
|
return self.data.isocalendar()[0]
|
||||||
|
|
||||||
def O(self):
|
def O(self):
|
||||||
"Difference to Greenwich time in hours; e.g. '+0200', '-0430'"
|
"Difference to Greenwich time in hours; e.g. '+0200', '-0430'"
|
||||||
seconds = self.Z()
|
seconds = self.Z()
|
||||||
|
|
|
@ -1276,8 +1276,8 @@ date
|
||||||
|
|
||||||
Formats a date according to the given format.
|
Formats a date according to the given format.
|
||||||
|
|
||||||
Uses the same format as PHP's ``date()`` function (http://php.net/date)
|
Uses a similar format as PHP's ``date()`` function (http://php.net/date)
|
||||||
with some custom extensions.
|
with some differences.
|
||||||
|
|
||||||
Available format strings:
|
Available format strings:
|
||||||
|
|
||||||
|
@ -1299,6 +1299,9 @@ c ISO 8601 format. (Note: unlike others ``2008-01-02T10:30:0
|
||||||
d Day of the month, 2 digits with ``'01'`` to ``'31'``
|
d Day of the month, 2 digits with ``'01'`` to ``'31'``
|
||||||
leading zeros.
|
leading zeros.
|
||||||
D Day of the week, textual, 3 letters. ``'Fri'``
|
D Day of the week, textual, 3 letters. ``'Fri'``
|
||||||
|
e Timezone name. Could be in any format,
|
||||||
|
or might return an empty string, ``''``, ``'GMT'``, ``'-500'``, ``'US/Eastern'``, etc.
|
||||||
|
depending on the datetime.
|
||||||
E Month, locale specific alternative
|
E Month, locale specific alternative
|
||||||
representation usually used for long
|
representation usually used for long
|
||||||
date representation. ``'listopada'`` (for Polish locale, as opposed to ``'Listopad'``)
|
date representation. ``'listopada'`` (for Polish locale, as opposed to ``'Listopad'``)
|
||||||
|
@ -1323,6 +1326,9 @@ M Month, textual, 3 letters. ``'Jan'``
|
||||||
n Month without leading zeros. ``'1'`` to ``'12'``
|
n Month without leading zeros. ``'1'`` to ``'12'``
|
||||||
N Month abbreviation in Associated Press ``'Jan.'``, ``'Feb.'``, ``'March'``, ``'May'``
|
N Month abbreviation in Associated Press ``'Jan.'``, ``'Feb.'``, ``'March'``, ``'May'``
|
||||||
style. Proprietary extension.
|
style. Proprietary extension.
|
||||||
|
o ISO-8601 week-numbering year, ``'1999'``
|
||||||
|
corresponding to
|
||||||
|
the ISO-8601 week number (W)
|
||||||
O Difference to Greenwich time in hours. ``'+0200'``
|
O Difference to Greenwich time in hours. ``'+0200'``
|
||||||
P Time, in 12-hour hours, minutes and ``'1 a.m.'``, ``'1:30 p.m.'``, ``'midnight'``, ``'noon'``, ``'12:30 p.m.'``
|
P Time, in 12-hour hours, minutes and ``'1 a.m.'``, ``'1:30 p.m.'``, ``'midnight'``, ``'noon'``, ``'12:30 p.m.'``
|
||||||
'a.m.'/'p.m.', with minutes left off
|
'a.m.'/'p.m.', with minutes left off
|
||||||
|
|
|
@ -345,6 +345,12 @@ def get_filter_tests():
|
||||||
'date02': (r'{{ d|date }}', {'d': datetime(2008, 1, 1)}, 'Jan. 1, 2008'),
|
'date02': (r'{{ d|date }}', {'d': datetime(2008, 1, 1)}, 'Jan. 1, 2008'),
|
||||||
#Ticket 9520: Make sure |date doesn't blow up on non-dates
|
#Ticket 9520: Make sure |date doesn't blow up on non-dates
|
||||||
'date03': (r'{{ d|date:"m" }}', {'d': 'fail_string'}, ''),
|
'date03': (r'{{ d|date:"m" }}', {'d': 'fail_string'}, ''),
|
||||||
|
# ISO date formats
|
||||||
|
'date04': (r'{{ d|date:"o" }}', {'d': datetime(2008, 12, 29)}, '2009'),
|
||||||
|
'date05': (r'{{ d|date:"o" }}', {'d': datetime(2010, 1, 3)}, '2009'),
|
||||||
|
# Timezone name
|
||||||
|
'date06': (r'{{ d|date:"e" }}', {'d': datetime(2009, 3, 12, tzinfo=FixedOffset(30))}, '+0030'),
|
||||||
|
'date07': (r'{{ d|date:"e" }}', {'d': datetime(2009, 3, 12)}, ''),
|
||||||
|
|
||||||
# Tests for #11687 and #16676
|
# Tests for #11687 and #16676
|
||||||
'add01': (r'{{ i|add:"5" }}', {'i': 2000}, '2005'),
|
'add01': (r'{{ i|add:"5" }}', {'i': 2000}, '2005'),
|
||||||
|
|
Loading…
Reference in New Issue