diff --git a/bot/models/reminder.py b/bot/models/reminder.py index c2d2ca5..2f269a2 100644 --- a/bot/models/reminder.py +++ b/bot/models/reminder.py @@ -3,6 +3,8 @@ from __future__ import annotations from datetime import datetime from typing import List, Optional +import pytz + from sqlalchemy import ( Boolean, DateTime, @@ -74,7 +76,11 @@ class Reminder(Base): def schedule_summary(self) -> str: if self.reminder_type == "once" and self.once_time: - return self.once_time.strftime("%Y-%m-%d %H:%M") + tz = pytz.timezone("Asia/Shanghai") + dt = self.once_time + if dt.tzinfo is None: + dt = pytz.utc.localize(dt) + return dt.astimezone(tz).strftime("%Y-%m-%d %H:%M") if self.reminder_type == "daily" and self.daily_time: return f"每天 {self.daily_time}" if self.reminder_type == "weekly" and self.weekly_days and self.daily_time: diff --git a/bot/scheduler/job_manager.py b/bot/scheduler/job_manager.py index 8bded49..b84d8a6 100644 --- a/bot/scheduler/job_manager.py +++ b/bot/scheduler/job_manager.py @@ -101,7 +101,7 @@ def _build_trigger(reminder: Reminder): return None run_time = reminder.once_time if run_time.tzinfo is None: - run_time = SHANGHAI_TZ.localize(run_time) + run_time = pytz.utc.localize(run_time) if run_time <= datetime.now(timezone.utc).astimezone(SHANGHAI_TZ): return None # already passed return DateTrigger(run_date=run_time, timezone=SHANGHAI_TZ)