【问题标题】:Datetime and offsets in .net.net 中的日期时间和偏移量
【发布时间】:2012-05-04 15:46:57
【问题描述】:

如何安排后台作业在哥伦比亚时间每天晚上 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 对象。

请帮忙

【问题讨论】:

    标签: .net datetime quartz.net datetimeoffset quartz.net-2.0


    【解决方案1】:

    基于 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);
    

    【讨论】:

      【解决方案2】:

      这应该为您提供今天晚上 9 点的 DateTimeOffset,转换为 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));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-10
        • 2011-05-18
        • 2020-10-24
        • 2018-02-20
        • 1970-01-01
        • 2015-08-26
        • 2018-03-15
        • 1970-01-01
        相关资源
        最近更新 更多