from datetime import datetime from datetime import date from zoneinfo import ZoneInfo BEIJING_TZ = ZoneInfo("Asia/Shanghai") def beijing_now() -> datetime: # 数据库字段使用无时区DateTime,写入前统一转换成北京时间,避免UTC时间直接显示到业务界面。 return datetime.now(BEIJING_TZ).replace(tzinfo=None) def beijing_today() -> date: # Agent日报的业务日期按北京时间计算,避免UTC服务器在清晨生成前一天日报。 return datetime.now(BEIJING_TZ).date() def to_beijing_naive(value: datetime) -> datetime: # 外部接口常返回带时区时间,入库前统一换算为北京时间的无时区值。 if value.tzinfo is None: return value return value.astimezone(BEIJING_TZ).replace(tzinfo=None)