2012-05-04 3 views
0

Как я могу запланировать фоновое задание для запуска каждый день в 9 вечера в Колумбийское время? Im using quartz.netDatetime и смещения в .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-based scheduling может быть лучшей альтернативой для ваших нужд.

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); 
1

Это должно дать вам 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)); 
Смежные вопросы