diff --git a/django/utils/dateparse.py b/django/utils/dateparse.py index e069f5df39..47791b9331 100644 --- a/django/utils/dateparse.py +++ b/django/utils/dateparse.py @@ -23,7 +23,7 @@ datetime_re = _lazy_re_compile( r'(?P\d{4})-(?P\d{1,2})-(?P\d{1,2})' r'[T ](?P\d{1,2}):(?P\d{1,2})' r'(?::(?P\d{1,2})(?:[\.,](?P\d{1,6})\d{0,6})?)?' - r'(?PZ|[+-]\d{2}(?::?\d{2})?)?$' + r'\s*(?PZ|[+-]\d{2}(?::?\d{2})?)?$' ) standard_duration_re = _lazy_re_compile( diff --git a/tests/utils_tests/test_dateparse.py b/tests/utils_tests/test_dateparse.py index 0ecbe24847..9d0f5c274c 100644 --- a/tests/utils_tests/test_dateparse.py +++ b/tests/utils_tests/test_dateparse.py @@ -40,6 +40,9 @@ class DateParseTests(unittest.TestCase): ('2012-04-23T10:20:30.400+02', datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(120))), ('2012-04-23T10:20:30.400-02', datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(-120))), ('2012-04-23T10:20:30,400-02', datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(-120))), + ('2012-04-23T10:20:30.400 +0230', datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(150))), + ('2012-04-23T10:20:30,400 +00', datetime(2012, 4, 23, 10, 20, 30, 400000, get_fixed_timezone(0))), + ('2012-04-23T10:20:30 -02', datetime(2012, 4, 23, 10, 20, 30, 0, get_fixed_timezone(-120))), ) for source, expected in valid_inputs: with self.subTest(source=source):