问题
用户配置里有 Info/Server,明日方舟支持 Official / Bilibili / YoStarEN / YoStarJP / YoStarKR / txwy(app/utils/constants.py:125 起),但它从不参与任何日期计算——换日锚点 UTC4 是无条件写死的。
# app/utils/constants.py:29
UTC4 = timezone(timedelta(hours=4))
Info/Server 的全部读取点都用于包名映射与登录流程,没有任何一处进入日期判断。受影响的日期逻辑:
| 位置 |
用途 |
各脚本 AutoProxy 的 curdate |
LastProxyDate / ProxyTimes 归零判定 |
RemainedDay 扣减 |
剩余天数 |
app/models/config.py:2649、:2688 |
计划表周模式取当天配置 |
app/core/config.py:1995 |
资源本开放日 isoweekday()(仅影响 UI 下拉框标签,不进入运行) |
为什么这是结构性缺陷
东 4 区零点等价于「服务器 UTC+8、04:00 换日」。各区服的服务器时区不同:
| 区服 |
服务器时区 |
若 04:00 换日则锚点应为 |
MAS 实际使用 |
| 官服 / B服 / txwy |
UTC+8 |
UTC+4 |
UTC+4 ✅ |
| YoStarJP / YoStarKR |
UTC+9 |
UTC+5 |
UTC+4 ❌ |
| YoStarEN |
待确认 |
待确认 |
UTC+4 ❌ |
YoStarEN 的服务器时区、以及是否随美西夏令时漂移,我没有权威来源,标为待确认。本 issue 只断言结构性事实:无论各区服的正确锚点是什么,对所有区服一律使用 UTC+4 都不可能同时正确。
影响
以偏差最大的 YoStarEN 为例:MAS 认为游戏日在 UTC+4 零点翻页,服务器实际换日在另一个时刻。两者错开多少小时,就有多长的窗口出现以下问题:
LastProxyDate 与 ProxyTimes 在游戏日中途归零 → 同一游戏日内重复跑
ProxyTimesLimit(代理次数上限)形同虚设
RemainedDay 在错误的时刻扣减
- 计划表周模式取到相邻一天的配置
- 用户列表「今日已代理」标签与实际不符
对国服 / B服 / txwy 用户无影响。
对照:数据侧已经有区服时区概念
活动关卡的期间判断已经正确地按区服取时区:
# app/models/config.py(活动关卡)
activity_timezone = timezone(timedelta(hours=activity.get("TimeZone", 8)))
if (datetime.strptime(activity["UtcStartTime"], "%Y/%m/%d %H:%M:%S").replace(tzinfo=activity_timezone)
< datetime.now(tz=activity_timezone) < ...):
也就是说时区信息在数据层已经存在,只是日常状态与计划表逻辑没有接上。
建议
引入 Server → 换日锚点 映射表,把以下三处改为按用户区服取时区:
- 各脚本
AutoProxy 的 curdate / LastProxyDate / ProxyTimes / RemainedDay
- 计划表周模式的当天判定(
app/models/config.py:2649、:2688)
- 资源本开放日(
app/core/config.py:1995)
落地前需要先确认各区服的实际换日时刻,尤其是 YoStarEN 是否随美西夏令时变化——如果会,映射表就不能是固定偏移,得用具名时区。
环境
- 上游
dev @ 9e6b0d0a(2026-08-30)
问题
用户配置里有
Info/Server,明日方舟支持Official / Bilibili / YoStarEN / YoStarJP / YoStarKR / txwy(app/utils/constants.py:125起),但它从不参与任何日期计算——换日锚点UTC4是无条件写死的。Info/Server的全部读取点都用于包名映射与登录流程,没有任何一处进入日期判断。受影响的日期逻辑:AutoProxy的curdateLastProxyDate/ProxyTimes归零判定RemainedDay扣减app/models/config.py:2649、:2688app/core/config.py:1995isoweekday()(仅影响 UI 下拉框标签,不进入运行)为什么这是结构性缺陷
东 4 区零点等价于「服务器 UTC+8、04:00 换日」。各区服的服务器时区不同:
影响
以偏差最大的 YoStarEN 为例:MAS 认为游戏日在 UTC+4 零点翻页,服务器实际换日在另一个时刻。两者错开多少小时,就有多长的窗口出现以下问题:
LastProxyDate与ProxyTimes在游戏日中途归零 → 同一游戏日内重复跑ProxyTimesLimit(代理次数上限)形同虚设RemainedDay在错误的时刻扣减对国服 / B服 / txwy 用户无影响。
对照:数据侧已经有区服时区概念
活动关卡的期间判断已经正确地按区服取时区:
也就是说时区信息在数据层已经存在,只是日常状态与计划表逻辑没有接上。
建议
引入
Server → 换日锚点映射表,把以下三处改为按用户区服取时区:AutoProxy的curdate/LastProxyDate/ProxyTimes/RemainedDayapp/models/config.py:2649、:2688)app/core/config.py:1995)落地前需要先确认各区服的实际换日时刻,尤其是 YoStarEN 是否随美西夏令时变化——如果会,映射表就不能是固定偏移,得用具名时区。
环境
dev@9e6b0d0a(2026-08-30)