"""Python 3.10+; parse service-day offsets, not timezone instants.""" import re import unittest def service_seconds(value): if not isinstance(value, str) or not re.fullmatch(r"[0-9]+:[0-5][0-9]:[0-5][0-9]", value): raise ValueError("expected nonnegative H:MM:SS") hours, minutes, seconds = map(int, value.split(":")) return hours * 3600 + minutes * 60 + seconds class ServiceTimeTests(unittest.TestCase): def test_midnight_and_next_day(self): self.assertEqual(service_seconds("23:59:59"), 86399) self.assertEqual(service_seconds("24:00:00"), 86400) self.assertEqual(service_seconds("27:15:00"), 98100) self.assertEqual(service_seconds("8:05:00"), 29100) def test_order_is_numeric(self): self.assertLess(service_seconds("9:00:00"), service_seconds("10:00:00")) self.assertGreater(service_seconds("25:00:00"), service_seconds("23:00:00")) def test_bad_values(self): for bad in ("-1:00:00", "24:60:00", "24:00:60", "1:2:03", " 24:00:00", "", None): with self.subTest(value=bad), self.assertRaises(ValueError): service_seconds(bad) if __name__ == "__main__": unittest.main()