From d3c87a2425b30400c3e6ea76585a9a537b6d0386 Mon Sep 17 00:00:00 2001 From: Lukasz Wiecek Date: Wed, 13 Apr 2016 17:31:31 +0100 Subject: [PATCH] Fixed #26498 -- Fixed TimeField microseconds round-tripping on MySQL and SQLite. Thanks adamchainz for the report and review. --- django/db/backends/utils.py | 2 +- docs/releases/1.8.13.txt | 3 ++- docs/releases/1.9.6.txt | 3 +++ tests/db_typecasts/tests.py | 3 +++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/django/db/backends/utils.py b/django/db/backends/utils.py index dce453b7b0..c01bcc2598 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 b1a3dd0c20..f725c37f99 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 bf2e61a5c1..c22e99f48e 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 98748abee4..fa9eab164d 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),