From c68ba3853314c083c8fae1b453584d2142925bea Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 16 Aug 2023 14:27:59 +0530 Subject: [PATCH] Fix a regression in the previous release that broke parsing of some IS0 8601 timestamps. Fixes #2031341 [Calibre corrupts last modified date when using the server](https://bugs.launchpad.net/calibre/+bug/2031341) timezone() unlike tzoffset() requires timedelta() objects instead of seconds --- src/calibre/utils/iso8601.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/calibre/utils/iso8601.py b/src/calibre/utils/iso8601.py index 22890c1383..f4733d80e5 100644 --- a/src/calibre/utils/iso8601.py +++ b/src/calibre/utils/iso8601.py @@ -2,11 +2,10 @@ # License: GPLv3 Copyright: 2016, Kovid Goyal -from datetime import datetime, timezone +from datetime import datetime, timedelta, timezone from calibre_extensions import speedup - utc_tz = timezone.utc local_tz = datetime.now().astimezone().tzinfo UNDEFINED_DATE = datetime(101,1,1, tzinfo=utc_tz) @@ -23,7 +22,7 @@ def parse_iso8601(date_string, assume_utc=False, as_utc=True, require_aware=Fals else: sign = '-' if tzseconds < 0 else '+' description = "%s%02d:%02d" % (sign, abs(tzseconds) // 3600, (abs(tzseconds) % 3600) // 60) - tz = timezone(tzseconds, description) + tz = timezone(timedelta(seconds=tzseconds), description) elif require_aware: raise ValueError(f'{date_string} does not specify a time zone') dt = dt.replace(tzinfo=tz)