tools (common/date_utils): accept more units (shortcuts) + fix timezone when date with relative delta is used

This commit is contained in:
Goffi 2021-07-29 22:51:01 +02:00
commit aab8a38836

View file

@ -31,8 +31,22 @@ import time
import re
RELATIVE_RE = re.compile(r"(?P<date>.*?)(?P<direction>[-+]?) *(?P<quantity>\d+) *"
r"(?P<unit>(second|minute|hour|day|week|month|year))s?"
r"(?P<unit>(second|sec|s|minute|min|month|mo|m|hour|hr|h|day|d"
r"|week|w|year|yr|y))s?"
r"(?P<ago> +ago)?", re.I)
TIME_SYMBOL_MAP = {
"s": "second",
"sec": "second",
"m": "minute",
"min": "minute",
"h": "hour",
"hr": "hour",
"d": "day",
"w": "week",
"mo": "month",
"y": "year",
"yr": "year",
}
YEAR_FIRST_RE = re.compile(r"\d{4}[^\d]+")
TZ_UTC = tz.tzutc()
TZ_LOCAL = tz.gettz()
@ -84,11 +98,15 @@ def date_parse_ext(value, default_tz=TZ_UTC):
if not date or date == "now":
dt = datetime.datetime.now(tz.tzutc())
else:
dt = default_tzinfo(parser.parse(date, dayfirst=True))
dt = default_tzinfo(parser.parse(date, dayfirst=True), default_tz)
quantity = int(m.group("quantity"))
key = m.group("unit").lower() + "s"
delta_kw = {key: direction * quantity}
unit = m.group("unit").lower()
try:
unit = TIME_SYMBOL_MAP[unit]
except KeyError:
pass
delta_kw = {f"{unit}s": direction * quantity}
dt = dt + relativedelta(**delta_kw)
return calendar.timegm(dt.utctimetuple())