diff --git a/app/admin/repositories/cps.py b/app/admin/repositories/cps.py index a71e16b..4790f93 100644 --- a/app/admin/repositories/cps.py +++ b/app/admin/repositories/cps.py @@ -394,7 +394,10 @@ def group_click_timeseries( agg: dict = {} # bucket_key -> {vp, vu(set), cp, cu(set)} for clicked_at, event_type, ip, ua in rows: - bj = clicked_at.astimezone(_BJ_TZ) + # naive(本地 SQLite 读回无 tz)按 UTC 兜底,再转北京——与 queries._as_utc 约定一致, + # 否则 astimezone 会把 UTC 瞬刻当系统本地时区解释,分桶整体偏移。 + ca = clicked_at if clicked_at.tzinfo else clicked_at.replace(tzinfo=timezone.utc) + bj = ca.astimezone(_BJ_TZ) key = bj.strftime("%Y-%m-%d") if granularity == "day" else bj.hour b = agg.setdefault(key, {"vp": 0, "vu": set(), "cp": 0, "cu": set()}) uid = f"{ip or ''}|{ua or ''}"