Files
tick-stock-panel/backend/app/market_time.py
T
Gundy ad83a5f960 fix(realtime): 交易时段判断与落盘日期显式使用北京时间
quote_service/depth_service 的 _is_trading_hours 原用 naive
datetime.now() 取服务器本地时间; Docker 镜像 (python:slim) 默认
UTC, 北京 9:15-15:05 = UTC 1:15-7:05, 轮询窗口完全错开——Docker
部署的实时行情/五档监控在真实交易时段一次都不会跑。

- 新增 app/market_time.py: CN_TZ 固定 UTC+8 (A股无夏令时,
  不依赖系统 tzdata, Windows 桌面版同样可用)
- 两个服务的 _is_trading_hours / date.today() 全部切换
- monitor.py 的 as_of 日期同步对齐
- Dockerfile 加 ENV TZ=Asia/Shanghai 兜底 (日志时间戳)
2026-07-03 14:11:26 +08:00

22 lines
669 B
Python

"""A股市场时间工具 — 固定北京时间 (UTC+8, 无夏令时)。
服务器/容器本地时区不可靠 (python:slim 镜像默认 UTC), 交易时段判断、
实时行情落盘日期等必须显式使用北京时间, 否则 Docker 部署时轮询窗口
与真实交易时段完全错开 (北京 9:15-15:05 = UTC 1:15-7:05)。
"""
from __future__ import annotations
from datetime import date, datetime, timedelta, timezone
CN_TZ = timezone(timedelta(hours=8))
def cn_now() -> datetime:
"""当前北京时间 (带时区)。"""
return datetime.now(CN_TZ)
def cn_today() -> date:
"""当前北京日期。"""
return datetime.now(CN_TZ).date()