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. spark源码分析以及优化

    第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...

  2. [搬运]Intellij IDEA 汉化

    Github地址: https://github.com/pingfangx/TranslatorX

  3. 网站用https访问的问题

    网站挂到阿里云上, 可以http访问, 也可以https访问. 但是如果用https方式访问网站.发现接口报错. 因为接口只提供http方式. 在谷歌浏览器出现: Mixed Content: The ...

  4. ubuntu 显示桌面快捷键

    ubuntu 显示桌面快捷键 快速显示桌面的快捷键是 ctrl + win + d win:就是窗口键,在键盘左侧ctrl与Alt之间的那个建.

  5. 成为python程序员,对疫情过后的毕业生来说,真是一个不错的方向吗?

    Python最近几年,一直被炒得很火,这其中有商业因素,但更重要的是即将到来的人工智能时代,而python就恰好是最适合的编程语言. 所以无论是在职的人,还是在校的学生,都想着跟上这一趋势,但,在今年 ...

  6. VMware Workstation 15密钥

    在打开的VMware Workstation 15输入许可证密钥对话框里直接输入25位密钥,然后点击确定,如下图所示. 这里提供一个密钥: CG392-4PX5J-H816Z-HYZNG-PQRG2

  7. Maximum Subsequence Sum(java)

    7-1 Maximum Subsequence Sum(25 分) Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A con ...

  8. Python3-logging模块-日志记录

    Python3中的logging模块提供了较为灵活的事件日志系统 日志级别 DEBUG < INFO < WARING(Python默认) < ERROR < FATAL(CR ...

  9. 【转载】npx 真香

    npx 主要提供了一些便捷操作: 调用项目安装的模块 避免全局安装模块 使用不同版本的 node 执行 GitHub 源码 原文地址:http://www.ruanyifeng.com/blog/20 ...

  10. Flask项目实战:创建电影网站(2)

    flask网站制作后台时候常见流程总结 安利一个神神器: 百度脑图PC版 创建数据库 下面是创建User数据库,需要导入db库 #coding:utf8 from flask import Flask ...