diff --git a/frontend/src/views/backtest/History.vue b/frontend/src/views/backtest/History.vue index ee50b61..f457d70 100644 --- a/frontend/src/views/backtest/History.vue +++ b/frontend/src/views/backtest/History.vue @@ -158,7 +158,7 @@ function statusLabel(s: string): string { - + diff --git a/sanguo_api/routes.py b/sanguo_api/routes.py index 26462ce..bf983b7 100644 --- a/sanguo_api/routes.py +++ b/sanguo_api/routes.py @@ -322,6 +322,18 @@ def factor_report(task_id: str, factor: str, token: str = Query(...)): # ===== History + Optimization endpoints (S3) ===== +def _to_bj(ts: str | None) -> str: + """SQLite CURRENT_TIMESTAMP 存的是 UTC → 转北京时间(+8)显示。""" + if not ts: + return "" + try: + from datetime import datetime, timedelta + dt = datetime.strptime(ts, "%Y-%m-%d %H:%M:%S") + return (dt + timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S") + except (ValueError, TypeError): + return ts + + @router.get("/task", dependencies=[Depends(verify_token)]) def list_tasks(type: str | None = None, status: str | None = None): """List tasks: 内存中 running/pending + DB done/failed(历史)。 @@ -377,7 +389,7 @@ def list_tasks(type: str | None = None, status: str | None = None): "symbol": r.symbol, "start": r.start, "end": r.end, - "created_at": r.created_at, + "created_at": _to_bj(r.created_at), }) active.reverse() # 最新提交的 running 在最上