我正在尝试在我的MVC应用程序中配置一个每天从00:00开始的定期任务。 我知道可以通过RecurringJob.AddOrUpdate(()=> Console.Write("Easy!"),Cron.Daily);
来实现这一点。
现在我的问题是,Hangfire Cron是基于UTC时间还是服务器本地时间运行? 如果它以本地时间工作,是否有办法在UTC时间上运行它? 我必须这样做,因为这将是一天结束的过程,并且所有预定任务都是基于数据库中的通用时间安排的。
我正在尝试在我的MVC应用程序中配置一个每天从00:00开始的定期任务。 我知道可以通过RecurringJob.AddOrUpdate(()=> Console.Write("Easy!"),Cron.Daily);
来实现这一点。
现在我的问题是,Hangfire Cron是基于UTC时间还是服务器本地时间运行? 如果它以本地时间工作,是否有办法在UTC时间上运行它? 我必须这样做,因为这将是一天结束的过程,并且所有预定任务都是基于数据库中的通用时间安排的。
TimeZoneInfo.Utc
作为TimeZoneInfo
。RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Daily, TimeZoneInfo.Utc);
要在本地时区执行作业,您可以使用TimeZoneInfo.Local
。
如果想要在特定的时区而不是协调世界时 (UTC) 运行,请查找所需的TimeZoneInfo
。
此任务将在IST午夜运行。
var manager = new RecurringJobManager();
manager.AddOrUpdate("some-id", Job.FromExpression(() => Method()),
Cron.Daily(),
TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"));
正如@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 中删除。'
RecurringJob.AddOrUpdate(() =>
homeCtrl.SendEmail(), Cron.Daily(),
TimeZoneInfo.Local);
// 12:00:00 AM