Beispiel #1
0
        public void TestQtz259()
        {
            ITrigger trigger = TriggerBuilder.Create().WithIdentity("test").WithCronSchedule("0 0 0 L-2 * ? *").Build();

            int            i     = 0;
            DateTimeOffset?pdate = trigger.GetFireTimeAfter(DateTimeOffset.Now);

            while (++i < 26)
            {
                DateTimeOffset?date = trigger.GetFireTimeAfter(pdate);
                // Console.WriteLine("fireTime: " + date + ", previousFireTime: " + pdate);
                Assert.False(pdate.Equals(date), "Next fire time is the same as previous fire time!");
                pdate = date;
            }
        }
        public void ShouldHandleDstFallBackTransition()
        {
            TimeZoneInfo tz = TZConvert.GetTimeZoneInfo("Pacific Standard Time");

            ITrigger trigger = TriggerBuilder.Create()
                               .WithIdentity("trigger1", "group1")
                               .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(1, 30).InTimeZone(tz))
                               .ForJob("job1", "group1")
                               .Build();

            DateTimeOffset midnight = new DateTimeOffset(2016, 11, 6, 0, 0, 0, TimeSpan.FromHours(-7));
            DateTimeOffset?fireTime = trigger.GetFireTimeAfter(midnight);

            // It should fire at the first instance, which is 1:30-7 - the DAYLIGHT time, not the standard time.
            DateTimeOffset expectedTime = new DateTimeOffset(2016, 11, 6, 1, 30, 0, TimeSpan.FromHours(-7));

            // We should definitely have a value
            Assert.NotNull(fireTime);

            // fireTime always is in UTC, but DateTimeOffset comparison normalized to UTC anyway.
            // Conversion here is for clarity of interpreting errors if the test fails.
            DateTimeOffset convertedFireTime = TimeZoneInfo.ConvertTime(fireTime.Value, tz);

            Assert.AreEqual(expectedTime, convertedFireTime);
        }
Beispiel #3
0
        //GetCronSchdule("0 */1 * * * ?", 10,DateTimeOffset.Now);

        /// <summary>
        /// Corn表达式的运行时间
        /// </summary>
        /// <param name="cron">表达式</param>
        /// <param name="times">计算次数</param>
        /// <param name="startTime">开始时间</param>
        /// <returns></returns>
        public static IList <DateTimeOffset?> GetCronSchdule(String cron, int times, DateTimeOffset startTime)
        {
            var list = new List <DateTimeOffset?>();

            if (!CronExpression.IsValidExpression(cron))
            {
                return(list);
            }

            try
            {
                ITrigger trigger1 = TriggerBuilder.Create()
                                    .WithCronSchedule(cron)
                                    .StartAt(DateTime.Now)
                                    .Build();

                DateTimeOffset?lastTime = startTime;
                //Console.WriteLine(LastTime.ToString());
                //list.Add(lastTime);
                for (int i = 0; i < times; i++)
                {
                    DateTimeOffset?s = trigger1.GetFireTimeAfter(lastTime);
                    lastTime = s;
                    //Console.WriteLine(((DateTimeOffset)s).AddHours(8).ToString());
                    list.Add(s.Value.AddHours(8));
                }
            }
            catch { }

            return(list);
        }
        public void ShouldHandleDstSpringForwardTransition()
        {
            TimeZoneInfo tz = TZConvert.GetTimeZoneInfo("Pacific Standard Time");

            ITrigger trigger = TriggerBuilder.Create()
                               .WithIdentity("trigger1", "group1")
                               .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(2, 30).InTimeZone(tz))
                               .ForJob("job1", "group1")
                               .Build();

            DateTimeOffset midnight = new DateTimeOffset(2016, 3, 13, 0, 0, 0, TimeSpan.FromHours(-8));
            DateTimeOffset?fireTime = trigger.GetFireTimeAfter(midnight);

            // It should fire at the equivalent valid local time.  2:30-8 does not exist, so it should run at 3:30-7.
            DateTimeOffset expectedTime = new DateTimeOffset(2016, 3, 13, 3, 30, 0, TimeSpan.FromHours(-7));

            // We should definitely have a value
            Assert.NotNull(fireTime);

            // fireTime always is in UTC, but DateTimeOffset comparison normalized to UTC anyway.
            // Conversion here is for clarity of interpreting errors if the test fails.
            DateTimeOffset convertedFireTime = TimeZoneInfo.ConvertTime(fireTime.Value, tz);

            Assert.AreEqual(expectedTime, convertedFireTime);
        }
        public void ShouldHandleDstFallBackTransition_AndNotRunTwiceOnTheSameDay()
        {
            TimeZoneInfo tz = TZConvert.GetTimeZoneInfo("Pacific Standard Time");

            ITrigger trigger = TriggerBuilder.Create()
                               .WithIdentity("trigger1", "group1")
                               .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(1, 30).InTimeZone(tz))
                               .ForJob("job1", "group1")
                               .Build();

            DateTimeOffset firstRun = new DateTimeOffset(2016, 11, 6, 1, 30, 0, TimeSpan.FromHours(-7));
            DateTimeOffset?fireTime = trigger.GetFireTimeAfter(firstRun);

            // It should not fire again at 1:30-8 on the same day, but should instead fire at 1:30-8 the following day.
            DateTimeOffset expectedTime = new DateTimeOffset(2016, 11, 7, 1, 30, 0, TimeSpan.FromHours(-8));

            // We should definitely have a value
            Assert.NotNull(fireTime);

            // fireTime always is in UTC, but DateTimeOffset comparison normalized to UTC anyway.
            // Conversion here is for clarity of interpreting errors if the test fails.
            DateTimeOffset convertedFireTime = TimeZoneInfo.ConvertTime(fireTime.Value, tz);

            Assert.AreEqual(expectedTime, convertedFireTime);
        }
        public Task TriggerMisfired(ITrigger trigger, CancellationToken cancellationToken = default(CancellationToken))
        {
            return(new TaskFactory().StartNew(() =>
            {
                ConsoleExtend.WriteLineDebug2(@"监听器名称【{0}】 触发器【{1}=>{2}】触发丢失 触发器描述【{3}】 作业【{4}=》{5}】 触发器参数【{6}】 
触发器日历名称【{7}】 最后执行时间【{8}】 下次执行时间【{9}】"
                                              , Name
                                              , trigger.Key.Group
                                              , trigger.Key.Name
                                              , trigger.Description
                                              , trigger.JobKey.Group
                                              , trigger.JobKey.Name
                                              , Newtonsoft.Json.JsonConvert.SerializeObject(trigger.JobDataMap)
                                              , trigger.CalendarName
                                              , trigger.FinalFireTimeUtc.HasValue ? trigger.FinalFireTimeUtc.Value.LocalDateTime.ToString() : String.Empty //最终执行时间
                                              , trigger.GetFireTimeAfter(DateTimeOffset.Now).HasValue
                        ? trigger.GetFireTimeAfter(DateTimeOffset.Now).Value.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss") : String.Empty                  //下次执行时间
                                              );
            }));
        }
        public Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, SchedulerInstruction triggerInstructionCode, CancellationToken cancellationToken = default(CancellationToken))
        {
            return(new TaskFactory().StartNew(() =>
            {
                ConsoleExtend.WriteLineDebug(@"监听器名称【{0}】 触发器【{1}=>{2}】触发完成 触发器描述【{3}】 作业【{4}=》{5}】 触发器参数【{6}】 
触发器日历名称【{7}】 最后执行时间【{8}】 下次执行时间【{9}】 作业执行时间【{10}】 触发的实际时间【{11}】 context中下次执行时间【{12}】"
                                             , Name
                                             , trigger.Key.Group
                                             , trigger.Key.Name
                                             , trigger.Description
                                             , trigger.JobKey.Group
                                             , trigger.JobKey.Name
                                             , Newtonsoft.Json.JsonConvert.SerializeObject(trigger.JobDataMap)
                                             , trigger.CalendarName
                                             , trigger.FinalFireTimeUtc.HasValue ? trigger.FinalFireTimeUtc.Value.LocalDateTime.ToString() : String.Empty //最终执行时间
                                             , trigger.GetFireTimeAfter(DateTimeOffset.Now).HasValue
                    ? trigger.GetFireTimeAfter(DateTimeOffset.Now).Value.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss") : String.Empty                     //下次执行时间
                                             , new DateTime(context.JobRunTime.Ticks)                                                                     //作业执行时间
                                             , context.FireTimeUtc.LocalDateTime
                                             , context.NextFireTimeUtc.HasValue ? context.NextFireTimeUtc.Value.LocalDateTime.ToString() : String.Empty
                                             );
            }));
        }
 private IEnumerable<DateTimeOffset> GetAllTimes(ITrigger trigger, DateTimeOffset startTime, DateTimeOffset end)
 {
     var start = startTime;
     DateTimeOffset? time = start;
     while (true)
     {
         time = trigger.GetFireTimeAfter(time);
         if (!time.HasValue || time > end)
             break;
         yield return time.Value;
     }
 }