diff --git a/frappe/utils/data.py b/frappe/utils/data.py index 23a271c77c..34ddc23155 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -112,9 +112,9 @@ def get_timedelta(time: Optional[str] = None) -> Optional[datetime.timedelta]: try: t = parser.parse(time) except ParserError as e: - if "day" in e.args[1]: - from frappe.utils import parse_timedelta + if "day" in e.args[1] or "hour must be in" in e.args[0]: return parse_timedelta(time) + raise e return datetime.timedelta( hours=t.hour, minutes=t.minute, seconds=t.second, microseconds=t.microsecond ) @@ -329,17 +329,24 @@ def get_year_ending(date): # last day of this month return add_to_date(date, days=-1) -def get_time(time_str): +def get_time(time_str: str) -> datetime.time: from dateutil import parser + from dateutil.parser import ParserError if isinstance(time_str, datetime.datetime): return time_str.time() elif isinstance(time_str, datetime.time): return time_str - else: - if isinstance(time_str, datetime.timedelta): - return format_timedelta(time_str) + elif isinstance(time_str, datetime.timedelta): + return (datetime.datetime.min + time_str).time() + try: return parser.parse(time_str).time() + except ParserError as e: + if "day" in e.args[1] or "hour must be in" in e.args[0]: + return ( + datetime.datetime.min + parse_timedelta(time_str) + ).time() + raise e def get_datetime_str(datetime_obj): if isinstance(datetime_obj, str):