Дата и время смещения в.net
Как я могу запланировать фоновую работу, которая будет начинаться каждый день в 9 вечера по колумбийскому времени? Я использую quartz.net
public class Program
{
static void Main(string[] args)
{
// construct a scheduler
var schedulerFactory = new StdSchedulerFactory();
var scheduler = schedulerFactory.GetScheduler();
scheduler.Start();
TimeZoneInfo colombianTimezone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time");
var colombianTimeNow = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local,
colombianTimezone);
var job = JobBuilder.Create<EmailsJob>().Build();
var now = DateTime.Now;
var trigger = TriggerBuilder.Create()
.StartAt(//INeedThisToStartEverydayat9pmColombianTime)
.WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
.Build();
scheduler.ScheduleJob(job, trigger);
}
}
Метод StartAt принимает объект DateTimeOffset.
Пожалуйста помоги
2 ответа
Решение
Планирование на основе Cron может быть лучшей альтернативой для ваших нужд.
TimeZoneInfo colombianTimezone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time");
var job = JobBuilder.Create<EmailsJob>().Build();
var trigger = TriggerBuilder.Create()
.WithCronSchedule("0 0 21 * * ?", x => x.InTimeZone(colombianTimezone))
.Build();
scheduler.ScheduleJob(job, trigger);
Это должно дать вам DateTimeOffset на сегодняшний день в 9 вечера, преобразованный в UniversalTime для перехода на кварц.
TimeZoneInfo colombianTimezone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time");
DateTime columbianTime9pm = TimeZoneInfo.ConvertTime(DateTime.Today.AddHours(21), TimeZoneInfo.Local,
colombianTimezone);
DateTimeOffset startAt = new DateTimeOffset(columbianTime9pm).ToUniversalTime();
Я не проверял это, но я думаю, что это также определит нужный триггер.
TimeZoneInfo colombianTimezone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time");
DateTime startTime = TimeZoneInfo.ConvertTime(DateTime.Today.AddHours(21), TimeZoneInfo.Local,
colombianTimezone);
SimpleTrigger trigger = new SimpleTrigger("myTrigger",
null,
startTime,
null,
SimpleTrigger.RepeatIndefinitely,
TimeSpan.FromHours(24));