diff --git a/django/db/backends/utils.py b/django/db/backends/utils.py index dce453b7b03..c01bcc25987 100644 --- a/django/db/backends/utils.py +++ b/django/db/backends/utils.py @@ -127,7 +127,7 @@ def typecast_time(s): # does NOT store time zone information seconds, microseconds = seconds.split('.') else: microseconds = '0' - return datetime.time(int(hour), int(minutes), int(seconds), int(float('.' + microseconds) * 1000000)) + return datetime.time(int(hour), int(minutes), int(seconds), int((microseconds + '000000')[:6])) def typecast_timestamp(s): # does NOT store time zone information diff --git a/docs/releases/1.8.13.txt b/docs/releases/1.8.13.txt index b1a3dd0c206..f725c37f99b 100644 --- a/docs/releases/1.8.13.txt +++ b/docs/releases/1.8.13.txt @@ -9,4 +9,5 @@ Django 1.8.13 fixes several bugs in 1.8.12. Bugfixes ======== -* ... +* Fixed ``TimeField`` microseconds round-tripping on MySQL and SQLite + (:ticket:`26498`). diff --git a/docs/releases/1.9.6.txt b/docs/releases/1.9.6.txt index bf2e61a5c19..c22e99f48ee 100644 --- a/docs/releases/1.9.6.txt +++ b/docs/releases/1.9.6.txt @@ -12,3 +12,6 @@ Bugfixes * Added support for relative path redirects to ``SimpleTestCase.assertRedirects()`` because Django 1.9 no longer converts redirects to absolute URIs (:ticket:`26428`). + +* Fixed ``TimeField`` microseconds round-tripping on MySQL and SQLite + (:ticket:`26498`). diff --git a/tests/db_typecasts/tests.py b/tests/db_typecasts/tests.py index 98748abee44..fa9eab164d4 100644 --- a/tests/db_typecasts/tests.py +++ b/tests/db_typecasts/tests.py @@ -27,6 +27,9 @@ TEST_CASES = { ('00:00:12', datetime.time(0, 0, 12)), ('00:00:12.5', datetime.time(0, 0, 12, 500000)), ('7:22:13.312', datetime.time(7, 22, 13, 312000)), + ('12:45:30.126631', datetime.time(12, 45, 30, 126631)), + ('12:45:30.126630', datetime.time(12, 45, 30, 126630)), + ('12:45:30.123456789', datetime.time(12, 45, 30, 123456)), ), 'typecast_timestamp': ( ('', None),