Hangfire CRON在UTC时间下的应用

27

我正在尝试在我的MVC应用程序中配置一个每天从00:00开始的定期任务。 我知道可以通过RecurringJob.AddOrUpdate(()=> Console.Write("Easy!"),Cron.Daily);来实现这一点。 现在我的问题是,Hangfire Cron是基于UTC时间还是服务器本地时间运行? 如果它以本地时间工作,是否有办法在UTC时间上运行它? 我必须这样做,因为这将是一天结束的过程,并且所有预定任务都是基于数据库中的通用时间安排的。

4个回答

50
要在UTC时区执行作业,您可以在定义作业时提供TimeZoneInfo.Utc作为TimeZoneInfo
RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Daily, TimeZoneInfo.Utc);

要在本地时区执行作业,您可以使用TimeZoneInfo.Local


15

如果想要在特定的时区而不是协调世界时 (UTC) 运行,请查找所需的TimeZoneInfo

此任务将在IST午夜运行。

var manager = new RecurringJobManager();
manager.AddOrUpdate("some-id", Job.FromExpression(() => Method()),
    Cron.Daily(),
    TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"));

3

正如@Arun Prasad E S所回答的一样,但它会提示过时警告,因此需要按照以下方式更改:

var timeZoneOptions = new RecurringJobOptions();
                timeZoneOptions.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

var manager = new RecurringJobManager();
manager.AddOrUpdate("some-id", Job.FromExpression(() => Method()),
    Cron.Daily(),
    timeZoneOptions );

警告信息:警告 CS0618:'RecurringJob.AddOrUpdate(Expression,string,TimeZoneInfo,string)' 已过时:'请使用带有显式recurringJobId参数和 RecurringJobOptions 参数的重载。 将在 2.0.0 中删除。'


0
RecurringJob.AddOrUpdate(() => 
   homeCtrl.SendEmail(), Cron.Daily(), 
   TimeZoneInfo.Local);

// 12:00:00 AM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接