diff --git a/src/calibre/utils/date.py b/src/calibre/utils/date.py index 4b9ed62bbc..5e10598baf 100644 --- a/src/calibre/utils/date.py +++ b/src/calibre/utils/date.py @@ -12,7 +12,7 @@ from functools import partial from calibre import strftime from calibre.constants import iswindows, isosx, plugins -from calibre.utils.iso8601 import utc_tz, local_tz +from calibre.utils.iso8601 import utc_tz, local_tz, UNDEFINED_DATE from calibre.utils.localization import lcdata _utc_tz = utc_tz @@ -53,7 +53,6 @@ else: except: parse_date_day_first = False -UNDEFINED_DATE = datetime(101,1,1, tzinfo=utc_tz) DEFAULT_DATE = datetime(2000,1,1, tzinfo=utc_tz) EPOCH = datetime(1970, 1, 1, tzinfo=_utc_tz) diff --git a/src/calibre/utils/iso8601.py b/src/calibre/utils/iso8601.py index 87fba239ea..a425056f45 100644 --- a/src/calibre/utils/iso8601.py +++ b/src/calibre/utils/iso8601.py @@ -29,9 +29,12 @@ class SafeLocalTimeZone(tzlocal): utc_tz = tzutc() local_tz = SafeLocalTimeZone() del tzutc, tzlocal +UNDEFINED_DATE = datetime(101,1,1, tzinfo=utc_tz) if hasattr(speedup, 'parse_iso8601'): # For people running from source without updated binaries - def parse_iso8601(date_string, assume_utc=True, as_utc=True): + def parse_iso8601(date_string, assume_utc=False, as_utc=True): + if not date_string: + return UNDEFINED_DATE dt, aware, tzseconds = speedup.parse_iso8601(date_string) tz = utc_tz if assume_utc else local_tz if aware: # timezone was specified @@ -133,7 +136,9 @@ else: minutes = -minutes return tzoffset(description, 3600*hours + 60*minutes) - def parse_iso8601(date_string, assume_utc=True, as_utc=True): + def parse_iso8601(date_string, assume_utc=False, as_utc=True): + if not date_string: + return UNDEFINED_DATE if isinstance(date_string, bytes): date_string = date_string.decode('ascii') m = iso_pat().match(date_string)