两项低优先级改进,都不影响功能正确性,只影响用户能否看懂发生了什么。
1. 通知标题与统计时间用本地日,历史归档用东 4 区日,两者会差一天
各脚本的通知标题和统计 end_time 用本地日期:
# app/task/*/manager.py
title = f"{datetime.now().strftime('%m-%d')} |{success_symbol}| ..."
出现位置:MAA/manager.py、M9A/manager.py(2 处)、MaaEnd/manager.py、general/manager.py、SRC/manager.py、OkNte/manager.py、Okww/manager.py、HSR/manager.py。
而历史记录目录用东 4 区日期。两者在分歧窗口内差一天:
run = datetime(2026, 8, 31, 22, 30, tzinfo=ZoneInfo("Europe/Berlin"))
print(run.strftime("%m-%d")) # 08-31 <- 通知标题
print(run.astimezone(UTC4).strftime("%Y-%m-%d")) # 2026-09-01 <- 历史归档目录
UTC+2 用户每天 22:00–24:00 跑的任务都会这样:通知说的是昨天,历史归到明天,对账时对不上。UTC+8 用户的对应窗口是本地 00:00–04:00。
Webhook 模板变量 {date} / {datetime} / {time} 同理(app/services/notification.py 的 template_vars)。
建议:通知与统计的日期统一走 UTC4;或在标题里同时给出两个口径,例如 09-01(本地 08-31)。
2. 签到失败时无法区分「凭据失效」和「系统时钟不准」
森空岛签名用 epoch 毫秒,与时区无关,但依赖系统时钟绝对准确:
app/tools/skland.py:340, 342 int(time.time() * 1000)
app/tools/skland.py:517 str(int(time.time()))
app/tools/skland.py:629 str(int(time.time() * 1000 - 2000))[:-3]
机器时钟偏差超出服务端容忍时签名会被拒绝,但错误信息呈现为凭据类失败,用户会反复重新登录、重新填 token,始终不知道真正原因。
海外机器(尤其是长期休眠的笔记本、虚拟机、未正确配置 NTP 的系统)时钟漂移概率高于国内。
建议:签到失败时附带一次时钟自检——与响应头的 Date 或任一可信时间源比对,偏差超过阈值就明确提示「系统时钟偏差 N 秒,请先校时」,而不是笼统报凭据错误。
环境
- 上游
dev @ 9e6b0d0a(2026-08-30)
两项低优先级改进,都不影响功能正确性,只影响用户能否看懂发生了什么。
1. 通知标题与统计时间用本地日,历史归档用东 4 区日,两者会差一天
各脚本的通知标题和统计
end_time用本地日期:出现位置:
MAA/manager.py、M9A/manager.py(2 处)、MaaEnd/manager.py、general/manager.py、SRC/manager.py、OkNte/manager.py、Okww/manager.py、HSR/manager.py。而历史记录目录用东 4 区日期。两者在分歧窗口内差一天:
UTC+2 用户每天 22:00–24:00 跑的任务都会这样:通知说的是昨天,历史归到明天,对账时对不上。UTC+8 用户的对应窗口是本地 00:00–04:00。
Webhook 模板变量
{date}/{datetime}/{time}同理(app/services/notification.py的template_vars)。建议:通知与统计的日期统一走
UTC4;或在标题里同时给出两个口径,例如09-01(本地 08-31)。2. 签到失败时无法区分「凭据失效」和「系统时钟不准」
森空岛签名用 epoch 毫秒,与时区无关,但依赖系统时钟绝对准确:
机器时钟偏差超出服务端容忍时签名会被拒绝,但错误信息呈现为凭据类失败,用户会反复重新登录、重新填 token,始终不知道真正原因。
海外机器(尤其是长期休眠的笔记本、虚拟机、未正确配置 NTP 的系统)时钟漂移概率高于国内。
建议:签到失败时附带一次时钟自检——与响应头的
Date或任一可信时间源比对,偏差超过阈值就明确提示「系统时钟偏差 N 秒,请先校时」,而不是笼统报凭据错误。环境
dev@9e6b0d0a(2026-08-30)