12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- from datetime import datetime, timedelta
- def get_query_time_range(param: dict, now: datetime = None):
- """
- 根据 param 的 start_time / end_time 生成查询区间,返回格式化后的字符串
- 规则:
- - 如果 start_time < end_time,则区间为 [昨天.start_time, 昨天.end_time]
- - 否则,区间为 [昨天.end_time, 今天.start_time]
- """
- now = now or datetime.now()
- # 解析时间
- start_time = datetime.strptime(param["start_time"], "%H:%M").time()
- end_time = datetime.strptime(param["end_time"], "%H:%M").time()
- today = now.date()
- yesterday = today - timedelta(days=1)
- if start_time < end_time:
- # 区间在同一天 (昨天)
- start_dt = datetime.combine(yesterday, start_time)
- end_dt = datetime.combine(yesterday, end_time)
- else:
- # 跨天
- start_dt = datetime.combine(yesterday, end_time)
- end_dt = datetime.combine(today, start_time)
- # 返回字符串
- return start_dt.strftime("%Y-%m-%d %H:%M:%S"), end_dt.strftime("%Y-%m-%d %H:%M:%S")
- def normalize_param_time(param: dict, now: datetime = None):
- """
- 把 param['start_time'], param['end_time'] (HH:MM) 转换成昨天的完整日期时间字符串
- 格式:YYYY-MM-DD HH:MM:SS
- """
- now = now or datetime.now()
- yesterday = (now - timedelta(days=1)).date()
- def to_datetime_str(hhmm: str) -> str:
- t = datetime.strptime(hhmm, "%H:%M").time()
- dt = datetime.combine(yesterday, t)
- return dt.strftime("%Y-%m-%d %H:%M:%S")
- return {
- "start_time": to_datetime_str(param["start_time"]),
- "end_time": to_datetime_str(param["end_time"]),
- }
- def is_point_in_rect(x, y, rect):
- """
- 判断点 (x, y) 是否在 rect 定义的矩形内
- rect 格式: [left, top, w, h]
- """
- if not rect or len(rect) != 4:
- return False
- left, top, w, h = rect
- right = left + w
- bottom = top + h
- return left <= x <= right and top <= y <= bottom
|