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 {
{{ typeLabel(row.type) }}
-
+
{{ statusLabel(row.status) }}
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 在最上