From 552a9621237e45cde97e2d0ea74a9883e2b1e2a5 Mon Sep 17 00:00:00 2001 From: qihu-bot Date: Tue, 18 Aug 2026 14:01:57 +0800 Subject: [PATCH] =?UTF-8?q?#977=20=E6=97=B6=E9=97=B4=E9=94=99=E4=BD=8D8?= =?UTF-8?q?=E5=B0=8F=E6=97=B6=E5=BD=BB=E5=BA=95=E4=BF=AE=E5=A4=8D=20-=20?= =?UTF-8?q?=5Fbeijing=5Fnow=E8=BF=94=E5=9B=9Eaware?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: _beijing_now返回naive datetime(无时区), PG timestamptz列按UTC误解, 存13:53UTC前端按Asia/Shanghai显示21:53错位8小时。修复: 去掉replace(tzinfo=None)返回aware datetime(带+08:00), PG正确转UTC存储, 前端正确显示。 --- backend/python/app/api/admin/im_bot_admin.py | 4 ++-- backend/python/app/api/im_bot_user.py | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/python/app/api/admin/im_bot_admin.py b/backend/python/app/api/admin/im_bot_admin.py index 0985e75..7b0cb9f 100644 --- a/backend/python/app/api/admin/im_bot_admin.py +++ b/backend/python/app/api/admin/im_bot_admin.py @@ -21,8 +21,8 @@ _TZ_BEIJING = timezone(timedelta(hours=8)) def _beijing_now(): - """返回 naive 北京时间(容器 UTC 时区下,需显式转)""" - return datetime.now(_TZ_BEIJING).replace(tzinfo=None) + """返回带时区的北京时间(aware datetime,存 PG timestamptz 不误解)。""" + return datetime.now(_TZ_BEIJING) from typing import Optional from fastapi import APIRouter, Depends, HTTPException, Query diff --git a/backend/python/app/api/im_bot_user.py b/backend/python/app/api/im_bot_user.py index 3932d49..816504d 100644 --- a/backend/python/app/api/im_bot_user.py +++ b/backend/python/app/api/im_bot_user.py @@ -40,8 +40,13 @@ TZ_BEIJING = timezone(timedelta(hours=8)) def _beijing_now() -> datetime: - """返回北京时间的 naive datetime(去掉 tzinfo 以便直接存入 MySQL DATETIME)。""" - return datetime.now(TZ_BEIJING).replace(tzinfo=None) + """返回带时区的北京时间(aware datetime)。 + + #977 关键修复:平台已全量迁 PG(时间列均为 timestamp with time zone), + 必须返回 aware datetime。此前 .replace(tzinfo=None) 返回 naive,PG 按 UTC + 误解导致错位 8 小时(如北京时间 13:53 存成 13:53 UTC → 前端显示 21:53)。 + """ + return datetime.now(TZ_BEIJING) # ============================================================ # iLink 协议常量(腾讯官方 iLink Bot HTTP API,直连免 AppID)