From 895f6e49925ed0ae4bb96dc4d3af17fdc9c4846e Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 27 Oct 2020 11:12:14 +0700 Subject: [PATCH] Fixed #32149 -- Added support for years < 1000 to DateFormat.y(). --- django/utils/dateformat.py | 4 ++-- docs/ref/templates/builtins.txt | 2 +- tests/utils_tests/test_dateformat.py | 13 +++++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/django/utils/dateformat.py b/django/utils/dateformat.py index afd36d79e0..c4d9d035e4 100644 --- a/django/utils/dateformat.py +++ b/django/utils/dateformat.py @@ -325,8 +325,8 @@ class DateFormat(TimeFormat): return self.data.isocalendar()[1] def y(self): - "Year, 2 digits; e.g. '99'" - return str(self.data.year)[2:] + """Year, 2 digits with leading zeros; e.g. '99'.""" + return '%02d' % (self.data.year % 100) def Y(self): "Year, 4 digits; e.g. '1999'" diff --git a/docs/ref/templates/builtins.txt b/docs/ref/templates/builtins.txt index 1c79f3a2f5..17528cea18 100644 --- a/docs/ref/templates/builtins.txt +++ b/docs/ref/templates/builtins.txt @@ -1379,7 +1379,7 @@ Format character Description Example output style. Proprietary extension. ``t`` Number of days in the given month. ``28`` to ``31`` **Year** -``y`` Year, 2 digits. ``'99'`` +``y`` Year, 2 digits with leading zeros. ``'00'`` to ``'99'`` ``Y`` Year, 4 digits. ``'1999'`` ``L`` Boolean for whether it's a leap year. ``True`` or ``False`` ``o`` ISO-8601 week-numbering year, ``'1999'`` diff --git a/tests/utils_tests/test_dateformat.py b/tests/utils_tests/test_dateformat.py index d050ac4352..5eb166e2bd 100644 --- a/tests/utils_tests/test_dateformat.py +++ b/tests/utils_tests/test_dateformat.py @@ -165,3 +165,16 @@ class DateFormatTests(SimpleTestCase): dateformat.format(dt, 'r'), 'Sun, 08 Jul 1979 22:00:00 +0100', ) + + def test_year_before_1000(self): + tests = [ + (476, '76'), + (42, '42'), + (4, '04'), + ] + for year, expected_date in tests: + with self.subTest(year=year): + self.assertEqual( + dateformat.format(datetime(year, 9, 8, 5, 0), 'y'), + expected_date, + )