diff --git a/ops/_private/timeconv.py b/ops/_private/timeconv.py index c97c8051e..0774e3942 100644 --- a/ops/_private/timeconv.py +++ b/ops/_private/timeconv.py @@ -52,7 +52,9 @@ def parse_rfc3339(s: str) -> datetime.datetime: microsecond = round(float(sfrac or '0') * 1000000) carry, microsecond = divmod(microsecond, 1000000) - ss = int(ss) + carry - return datetime.datetime(int(y), int(m), int(d), int(hh), int(mm), ss, - microsecond=microsecond, tzinfo=tz) + parsed = datetime.datetime(int(y), int(m), int(d), int(hh), int(mm), int(ss), + microsecond=microsecond, tzinfo=tz) + if carry: + return parsed + datetime.timedelta(seconds=carry) + return parsed diff --git a/test/test_private.py b/test/test_private.py index b2099fe07..f7c816a1a 100644 --- a/test/test_private.py +++ b/test/test_private.py @@ -75,6 +75,9 @@ def test_parse_rfc3339(self): self.assertEqual(timeconv.parse_rfc3339('2006-08-28T13:20:00.99999999Z'), datetime.datetime(2006, 8, 28, 13, 20, 1, 0, tzinfo=utc)) + self.assertEqual(timeconv.parse_rfc3339('2006-12-31T23:59:59.99999999Z'), + datetime.datetime(2007, 1, 1, 0, 0, 0, 0, tzinfo=utc)) + tzinfo = datetime.timezone(datetime.timedelta(hours=-11, minutes=-30)) self.assertEqual(timeconv.parse_rfc3339('2020-12-25T13:45:50.123456789-11:30'), datetime.datetime(2020, 12, 25, 13, 45, 50, 123457, tzinfo=tzinfo))