Quartz.Net中为了动态排除一些时间,而使用Calendar可以做到

1.DailyCalendar

可以动态的排除一天中的某些时间段

示例:在一天当中的13:00到14:00不要执行

        public async static Task Test()
{
var scheduler = await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); DailyCalendar dailyCalendar = new DailyCalendar(DateBuilder.DateOf(,,).DateTime,
DateBuilder.DateOf(,,).DateTime); var job = JobBuilder.Create<MyJob>().WithIdentity("MyJob").Build(); var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
d => d.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInSeconds()
)
.ModifiedByCalendar("myCalendar")
.Build(); await scheduler.AddCalendar("myCalendar", dailyCalendar, true,true); await scheduler.ScheduleJob(job, trigger);
}
    public class MyJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Task.Factory.StartNew(() =>
{
var nextTime = context.NextFireTimeUtc?.ToLocalTime(); var currentTime = DateTime.Now; var jobKey = context.JobDetail.Key; Console.WriteLine($"JobKey={jobKey}, CurrentTime={currentTime}, FireTime={context.ScheduledFireTimeUtc?.ToLocalTime()}, NextTime={nextTime}");
});
}
}

2.WeeklyCalendar

可以动态的排除一周内的哪几天不执行

示例:设置每周的周六和周日不能被执行

        public async static Task Test()
{
var scheduler = await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); //DailyCalendar dailyCalendar = new DailyCalendar(DateBuilder.DateOf(13,0,0).DateTime,
// DateBuilder.DateOf(14,0,0).DateTime); WeeklyCalendar calendar = new WeeklyCalendar(); calendar.SetDayExcluded(DayOfWeek.Sunday,true);
calendar.SetDayExcluded(DayOfWeek.Saturday, true); var job = JobBuilder.Create<MyJob>().WithIdentity("MyJob").Build(); var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
d => d.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInSeconds()
)
.ModifiedByCalendar("myCalendar")
.Build(); await scheduler.AddCalendar("myCalendar", calendar, true,true); await scheduler.ScheduleJob(job, trigger);
}

3.HolidayCalendar

动态的排除哪一天不执行

示例:设置今天不能被执行

  public async static Task Test()
{
var scheduler = await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); //DailyCalendar dailyCalendar = new DailyCalendar(DateBuilder.DateOf(13,0,0).DateTime,
// DateBuilder.DateOf(14,0,0).DateTime); //WeeklyCalendar calendar = new WeeklyCalendar(); //calendar.SetDayExcluded(DayOfWeek.Sunday,true);
//calendar.SetDayExcluded(DayOfWeek.Saturday, true); HolidayCalendar calendar = new HolidayCalendar(); calendar.AddExcludedDate(DateTime.Today); var job = JobBuilder.Create<MyJob>().WithIdentity("MyJob").Build(); var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
d => d.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInSeconds()
)
//.ModifiedByCalendar("myCalendar")
.Build(); await scheduler.AddCalendar("myCalendar", calendar, true,true); await scheduler.ScheduleJob(job, trigger);
}

4.MonthlyCalendar

排除每个月中的某一天不能被执行

示例:设置每月的第12天不能被执行

   public async static Task Test()
{
var scheduler = await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); //DailyCalendar dailyCalendar = new DailyCalendar(DateBuilder.DateOf(13,0,0).DateTime,
// DateBuilder.DateOf(14,0,0).DateTime); //WeeklyCalendar calendar = new WeeklyCalendar(); //calendar.SetDayExcluded(DayOfWeek.Sunday,true);
//calendar.SetDayExcluded(DayOfWeek.Saturday, true); //HolidayCalendar calendar = new HolidayCalendar(); //calendar.AddExcludedDate(DateTime.Today); //calendar.RemoveExcludedDate(DateTime.Now); MonthlyCalendar calendar = new MonthlyCalendar(); calendar.SetDayExcluded(, true); var job = JobBuilder.Create<MyJob>().WithIdentity("MyJob").Build(); var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
d => d.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInSeconds()
)
.ModifiedByCalendar("myCalendar")
.Build(); await scheduler.AddCalendar("myCalendar", calendar, true,true); await scheduler.ScheduleJob(job, trigger);
}

5.AnnualCalendar

排除每一年中的某一天不被执行

示例:设置每年的7月12日不能被执行

        public async static Task Test()
{
var scheduler = await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); //DailyCalendar dailyCalendar = new DailyCalendar(DateBuilder.DateOf(13,0,0).DateTime,
// DateBuilder.DateOf(14,0,0).DateTime); //WeeklyCalendar calendar = new WeeklyCalendar(); //calendar.SetDayExcluded(DayOfWeek.Sunday,true);
//calendar.SetDayExcluded(DayOfWeek.Saturday, true); //HolidayCalendar calendar = new HolidayCalendar(); //calendar.AddExcludedDate(DateTime.Today); //calendar.RemoveExcludedDate(DateTime.Now); //MonthlyCalendar calendar = new MonthlyCalendar(); //calendar.SetDayExcluded(12, true); AnnualCalendar calendar = new AnnualCalendar(); calendar.SetDayExcluded(new DateTime(,,),true); var job = JobBuilder.Create<MyJob>().WithIdentity("MyJob").Build(); var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
d => d.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInSeconds()
)
.ModifiedByCalendar("myCalendar")
.Build(); await scheduler.AddCalendar("myCalendar", calendar, true,true); await scheduler.ScheduleJob(job, trigger);
}
  public virtual void SetDayExcluded(DateTime day, bool exclude)
{
DateTime d = new DateTime(FixedYear, day.Month, day.Day, , , ); if (exclude)
{
if (!IsDateTimeExcluded(day, false))
{
excludeDays.Add(d);
}
}
else
{
// include
if (IsDateTimeExcluded(day, false))
{
excludeDays.Remove(d);
}
}
}

6.CronCalendar

以 Cron表达式的方式排除哪些时间不能被执行

示例:设置每月的第12天不能被执行

public async static Task Test()
{
var scheduler = await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); //DailyCalendar dailyCalendar = new DailyCalendar(DateBuilder.DateOf(13,0,0).DateTime,
// DateBuilder.DateOf(14,0,0).DateTime); //WeeklyCalendar calendar = new WeeklyCalendar(); //calendar.SetDayExcluded(DayOfWeek.Sunday,true);
//calendar.SetDayExcluded(DayOfWeek.Saturday, true); //HolidayCalendar calendar = new HolidayCalendar(); //calendar.AddExcludedDate(DateTime.Today); //calendar.RemoveExcludedDate(DateTime.Now); //MonthlyCalendar calendar = new MonthlyCalendar(); //calendar.SetDayExcluded(12, true); //AnnualCalendar calendar = new AnnualCalendar(); //calendar.SetDayExcluded(new DateTime(2020,7,12),true); CronCalendar calendar = new CronCalendar("* * * 12 * ?"); var job = JobBuilder.Create<MyJob>().WithIdentity("MyJob").Build(); var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
d => d.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInSeconds()
)
.ModifiedByCalendar("myCalendar")
.Build(); await scheduler.AddCalendar("myCalendar", calendar, true,true); await scheduler.ScheduleJob(job, trigger);
}

Quartz.Net系列(十二):六大Calendar(Annual、Cron、Daily、Holiday、Monthly、Weekly)的更多相关文章

  1. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

  2. SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

    原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Se ...

  3. Alamofire源码解读系列(十二)之请求(Request)

    本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...

  4. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  5. 爬虫系列(十二) selenium的基本使用

    一.selenium 简介 随着网络技术的发展,目前大部分网站都采用动态加载技术,常见的有 JavaScript 动态渲染和 Ajax 动态加载 对于爬取这些网站,一般有两种思路: 分析 Ajax 请 ...

  6. Alamofire源码解读系列(十二)之时间轴(Timeline)

    本篇带来Alamofire中关于Timeline的一些思路 前言 Timeline翻译后的意思是时间轴,可以表示一个事件从开始到结束的时间节点.时间轴的概念能够应用在很多地方,比如说微博的主页就是一个 ...

  7. 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. SpringBoot系列(十二)过滤器配置详解

    SpringBoot(十二)过滤器详解 往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件 ...

  9. 打开order by的大门,一探究竟《死磕MySQL系列 十二》

    在日常开发工作中,你一定会经常遇到要根据指定字段进行排序的需求. 这时,你的SQL语句类似这样. select id,phone,code from evt_sms where phone like  ...

随机推荐

  1. xdoj 2020校赛复盘

    平时写东西都不喜欢复盘,这肯定不是一个好习惯,感觉每次花好几个小时甚至好几天写题目然后没写出来也不去看题解是一种很蠢的行为( 花了这么久时间打校赛,虽然水平很low,数据结构也不太会用,还是记录一下自 ...

  2. 动态调试 别人写的jar包

    在别人的jar应用程序里: 在VMoption选项中添加: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50064 或者 ...

  3. ssh生成单个公钥

    ssh生成单个公钥命令: ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 查看公钥: cat ~/.ssh/id_rsa ...

  4. Spring IoC 自定义标签解析

    前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容 ...

  5. vue-elemnt-admin源码学习

    vue-elemnt-admin源码学习 vue-element-admin是一个基于vue,element-ui的集成的管理后台.它的安装部分就不说了,按照官网的步骤一步步就可以执行了. https ...

  6. script写在head与写在body中的区别

    咱先说将Javascript写在head里面的情况吧,如果你要在这里面去操控DOM元素,是会报错的,因为浏览器是先执行head标签里面的内容,在执行时你的DOM元素还没有生成.(使用了windows. ...

  7. React-Native WebView使用本地js,css渲染html

    前言 最近在使用React-Native开发一个App,遇见一个问题,Webview组件根据url来加载页面,但是这样导致的一个问题页面加载的时间有点长,我想优化一下,因为页面只要是一些内容展示,我想 ...

  8. IIS发布之后可能出现的问题集及解决方案

    1,首先注意发布的net目标框架,和发布的服务器所使用的框架是否一致

  9. linux就该这么学 第一天学习笔记

    题外话 在每天的网上冲浪中,一次无意间的点击,发现了linux就该这么学的网站,然后就看了一晚上,当时还是学生的我特别想要参加培训,可是碍于眼前的经济状况,只得将这个想法深深的藏在了心里,并加了一下网 ...

  10. 腾讯T8纯手写66个微服务架构设计模式,全部学会真的“变强”了

    微服务的概念虽然直观易懂,但“细节是魔鬼”,微服务在实操落地的环节中存在诸多挑战.我们在为企业提供PaaS.人工智能.云原生平台等数字化转型解决方案时也发现,企业实现云原生,并充分利用PaaS能力的第 ...