mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Workaround for bug in dateutil 2.5.3 that causes parsing of ISO 8601 dates to break on systems where the date locale specifies that days come before months
See https://github.com/dateutil/dateutil/issues/268
This commit is contained in:
parent
ae1fbeff6c
commit
b5cae785db
@ -108,6 +108,13 @@ def is_date_undefined(qt_or_dt):
|
||||
d.month == UNDEFINED_DATE.month and
|
||||
d.day == UNDEFINED_DATE.day)
|
||||
|
||||
_iso_pat = None
|
||||
def iso_pat():
|
||||
global _iso_pat
|
||||
if _iso_pat is None:
|
||||
_iso_pat = re.compile(r'\d{4}-\d{2}-\d{2}')
|
||||
return _iso_pat
|
||||
|
||||
def parse_date(date_string, assume_utc=False, as_utc=True, default=None):
|
||||
'''
|
||||
Parse a date/time string into a timezone aware datetime object. The timezone
|
||||
@ -128,6 +135,9 @@ def parse_date(date_string, assume_utc=False, as_utc=True, default=None):
|
||||
func = datetime.utcnow if assume_utc else datetime.now
|
||||
default = func().replace(day=15, hour=0, minute=0, second=0, microsecond=0,
|
||||
tzinfo=_utc_tz if assume_utc else _local_tz)
|
||||
if iso_pat().match(date_string):
|
||||
dt = parse(date_string, default=default)
|
||||
else:
|
||||
dt = parse(date_string, default=default, dayfirst=parse_date_day_first)
|
||||
if dt.tzinfo is None:
|
||||
dt = dt.replace(tzinfo=_utc_tz if assume_utc else _local_tz)
|
||||
|
Loading…
x
Reference in New Issue
Block a user