仅当时区与计算机时区相同时,node-cron时区才能工作

问题描述

我有以下代码。 "node-cron": "^2.0.3"

cron.schedule('46 00 * * *',() => {
   //code to be executed
  console.log("Tik")
  },{
    scheduled: true,timezone: "America/New_York"
  });

据我了解,无论我的机器时区如何,该时间应在美国/纽约时间上午12:46触发。但这要等到我将时区与托管机器时间匹配后才起作用,例如,如果我的机器时区是欧洲/伦敦,并且我使用timezone: "Europe/London",那么cron将在确切时间工作。

我想为特定时区安排cron。由于我要处理的时区很少,所以每半小时运行一次cron并进行检查,效果会很有效。

解决方法

好的,所以我对此错误的背后原因感到有些震惊。 node-cron使用tz-offset来计算时区偏移量……但是该模块不考虑夏令时!因此,我相信此库从根本上来说是有缺陷的,因为 lot 的时区使用DST(当然包括America / New_York。为此引起了一些问题:https://github.com/node-cron/tz-offset/issues/8

这意味着您的cron作业将在01:46或恰好延迟一个小时运行。 现在它将在正确的时间运行大约半年,这几乎使此问题更加严重。

我建议尝试使用cron模块,该代码将非常相似,但是由于它使用luxon来计算UTC偏移量,因此可以正确处理时区。

const CronJob = require('cron').CronJob;
const job = new CronJob('46 00 * * *',() => {
    console.log('Tik');
},null,true,'America/New_York');
job.start();

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...