diff --git a/src/commoncode/timeutils.py b/src/commoncode/timeutils.py index 45caf59..82bb7bd 100644 --- a/src/commoncode/timeutils.py +++ b/src/commoncode/timeutils.py @@ -86,7 +86,7 @@ def tstamp2time(stamp): except Exception: microsec = None if microsec: - microsec = int(microsec) + microsec = int(microsec.ljust(6, "0")[:6]) if 0 <= microsec <= 999999: datim = datim.replace(microsecond=microsec) return datim diff --git a/tests/test_timeutils.py b/tests/test_timeutils.py index 568b642..bef78bf 100644 --- a/tests/test_timeutils.py +++ b/tests/test_timeutils.py @@ -192,3 +192,17 @@ def test_tstamp2time9(self): def test_tstamp2time_raise(self): self.assertRaises(ValueError, tstamp2time, "201011A12T13:14:15Z") + + def test_tstamp2time_scales_fractional_seconds(self): + for fraction, expected in ( + ("1", 100000), + ("12", 120000), + ("123", 123000), + ("001", 1000), + ("123456", 123456), + ("1234567", 123456), + ): + for prefix in ("2010-11-12T13:14:15", "20101112T131415"): + with self.subTest(fraction=fraction, prefix=prefix): + result = tstamp2time(f"{prefix}.{fraction}Z") + assert result.microsecond == expected