Hangfire recurring job按0 9 * * * cron配置却提前1小时触发是什么原因
问题原因
1. Hangfire 1.7.0 版本已知时区处理缺陷
你当前使用的1.7.0版本存在Cron表达式时区计算的原生bug,在处理包含夏令时规则的自定义时区时,会出现固定1小时的时间偏移,导致任务触发时间不符合预期。该问题已经在后续的1.7.x维护版本中完成修复。
2. 操作系统时区数据过时
你代码中配置的E. South America Standard Time对应巴西东部时区,该地区在2019年正式取消了夏令时制度。如果运行服务的Windows系统时区数据未更新,仍然保留旧的夏令时规则,会导致时间计算时自动减去1小时,最终出现早8点触发的问题。
解决方案
- 优先升级Hangfire到1.7.36及以上的稳定版,无需修改现有业务代码即可修复版本自带的时区计算bug。
- 若暂时无法升级Hangfire版本,可临时将Cron表达式调整为
Cron.Daily(10),抵消1小时的偏移误差,该方案不建议长期使用,夏令时规则变更时需要同步调整。 - 安装服务器操作系统的最新累计更新,拉取最新的时区规则,确保
E. South America Standard Time的夏令时配置和当地现行规则一致。 - 可在服务端运行以下代码验证时区配置是否正确:
var tz = TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time"); // 巴西当前无夏令时,返回值正常应为False Console.WriteLine(tz.SupportsDaylightSavingTime);
内容的提问来源于stack exchange,提问作者Rafael Kayser Smiderle
相关产品推荐
相关产品推荐

