diff options
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | django/utils/dateformat.py | 14 | ||||
| -rw-r--r-- | docs/ref/templates/builtins.txt | 2 | ||||
| -rw-r--r-- | tests/regressiontests/dateformat/tests.py | 4 |
4 files changed, 20 insertions, 1 deletions
@@ -486,6 +486,7 @@ answer newbie questions, and generally made Django that much better: ymasuda@ethercube.com Jesse Young <adunar@gmail.com> Mykola Zamkovoi <nickzam@gmail.com> + zegor Gasper Zejn <zejn@kiberpipa.org> Jarek Zgoda <jarek.zgoda@gmail.com> Cheng Zhang diff --git a/django/utils/dateformat.py b/django/utils/dateformat.py index b2ea71228c..13cc2c7a81 100644 --- a/django/utils/dateformat.py +++ b/django/utils/dateformat.py @@ -19,7 +19,7 @@ from django.utils.tzinfo import LocalTimezone from django.utils.translation import ugettext as _ from django.utils.encoding import force_unicode -re_formatchars = re.compile(r'(?<!\\)([aAbBdDfFgGhHiIjlLmMnNOPrsStTUwWyYzZ])') +re_formatchars = re.compile(r'(?<!\\)([aAbBcdDfFgGhHiIjlLmMnNOPrsStTUuwWyYzZ])') re_escaped = re.compile(r'\\(.)') class Formatter(object): @@ -104,6 +104,11 @@ class TimeFormat(Formatter): "Seconds; i.e. '00' to '59'" return u'%02d' % self.data.second + def u(self): + "Microseconds" + return self.data.microsecond + + class DateFormat(TimeFormat): year_days = [None, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] @@ -118,6 +123,13 @@ class DateFormat(TimeFormat): "Month, textual, 3 letters, lowercase; e.g. 'jan'" return MONTHS_3[self.data.month] + def c(self): + """ + ISO 8601 Format + Example : '2008-01-02T10:30:00.000123' + """ + return self.data.isoformat(' ') + def d(self): "Day of the month, 2 digits with leading zeros; i.e. '01' to '31'" return u'%02d' % self.data.day diff --git a/docs/ref/templates/builtins.txt b/docs/ref/templates/builtins.txt index b7afa15f7f..51ef03c886 100644 --- a/docs/ref/templates/builtins.txt +++ b/docs/ref/templates/builtins.txt @@ -637,6 +637,7 @@ Available format strings: A ``'AM'`` or ``'PM'``. ``'AM'`` b Month, textual, 3 letters, lowercase. ``'jan'`` B Not implemented. + c ISO 8601 Format. ``2008-01-02 10:30:00.000123`` d Day of the month, 2 digits with ``'01'`` to ``'31'`` leading zeros. D Day of the week, textual, 3 letters. ``'Fri'`` @@ -673,6 +674,7 @@ Available format strings: month, 2 characters. t Number of days in the given month. ``28`` to ``31`` T Time zone of this machine. ``'EST'``, ``'MDT'`` + u Microseconds. ``0`` to ``999999`` U Seconds since the Unix Epoch (January 1 1970 00:00:00 UTC). w Day of the week, digits without ``'0'`` (Sunday) to ``'6'`` (Saturday) diff --git a/tests/regressiontests/dateformat/tests.py b/tests/regressiontests/dateformat/tests.py index bbde45b903..42c582cd0f 100644 --- a/tests/regressiontests/dateformat/tests.py +++ b/tests/regressiontests/dateformat/tests.py @@ -39,8 +39,10 @@ class DateFormatTests(TestCase): def test_date_formats(self): my_birthday = datetime.datetime(1979, 7, 8, 22, 00) + timestamp = datetime.datetime(2008, 5, 19, 11, 45, 23, 123456) self.assertEquals(dateformat.format(my_birthday, 'A'), u'PM') + self.assertEquals(dateformat.format(timestamp, 'c'), u'2008-05-19 11:45:23.123456') self.assertEquals(dateformat.format(my_birthday, 'd'), u'08') self.assertEquals(dateformat.format(my_birthday, 'j'), u'8') self.assertEquals(dateformat.format(my_birthday, 'l'), u'Sunday') @@ -79,12 +81,14 @@ class DateFormatTests(TestCase): my_birthday = datetime.datetime(1979, 7, 8, 22, 00) summertime = datetime.datetime(2005, 10, 30, 1, 00) wintertime = datetime.datetime(2005, 10, 30, 4, 00) + timestamp = datetime.datetime(2008, 5, 19, 11, 45, 23, 123456) if self.tz_tests: self.assertEquals(dateformat.format(my_birthday, 'O'), u'+0100') self.assertEquals(dateformat.format(my_birthday, 'r'), u'Sun, 8 Jul 1979 22:00:00 +0100') self.assertEquals(dateformat.format(my_birthday, 'T'), u'CET') self.assertEquals(dateformat.format(my_birthday, 'U'), u'300315600') + self.assertEquals(dateformat.format(timestamp, 'u'), u'123456') self.assertEquals(dateformat.format(my_birthday, 'Z'), u'3600') self.assertEquals(dateformat.format(summertime, 'I'), u'1') self.assertEquals(dateformat.format(summertime, 'O'), u'+0200') |
