From 0a411b2224c672ddefc6f9755e7a306d82eaf7c2 Mon Sep 17 00:00:00 2001 From: Lukasz Wiecek Date: Wed, 13 Apr 2016 17:31:31 +0100 Subject: [PATCH] [1.8.x] Fixed #26498 -- Fixed TimeField microseconds round-tripping on MySQL and SQLite. Thanks adamchainz for the report and review. Backport of d3c87a2425b30400c3e6ea76585a9a537b6d0386 from master --- django/db/backends/utils.py | 2 +- docs/releases/1.8.13.txt | 3 ++- tests/db_typecasts/tests.py | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/django/db/backends/utils.py b/django/db/backends/utils.py index 84444548d3..87a51a4624 100644 --- a/django/db/backends/utils.py +++ b/django/db/backends/utils.py @@ -125,7 +125,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/tests/db_typecasts/tests.py b/tests/db_typecasts/tests.py index d0e0db20d7..61dc69eee8 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),