Quartz.Net系列(十二):六大Calendar(Annual、Cron、Daily、Holiday、Monthly、Weekly)
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)的更多相关文章
- Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】
2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...
- SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据
原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Se ...
- Alamofire源码解读系列(十二)之请求(Request)
本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...
- struts2官方 中文教程 系列十二:控制标签
介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...
- 爬虫系列(十二) selenium的基本使用
一.selenium 简介 随着网络技术的发展,目前大部分网站都采用动态加载技术,常见的有 JavaScript 动态渲染和 Ajax 动态加载 对于爬取这些网站,一般有两种思路: 分析 Ajax 请 ...
- Alamofire源码解读系列(十二)之时间轴(Timeline)
本篇带来Alamofire中关于Timeline的一些思路 前言 Timeline翻译后的意思是时间轴,可以表示一个事件从开始到结束的时间节点.时间轴的概念能够应用在很多地方,比如说微博的主页就是一个 ...
- 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- SpringBoot系列(十二)过滤器配置详解
SpringBoot(十二)过滤器详解 往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件 ...
- 打开order by的大门,一探究竟《死磕MySQL系列 十二》
在日常开发工作中,你一定会经常遇到要根据指定字段进行排序的需求. 这时,你的SQL语句类似这样. select id,phone,code from evt_sms where phone like ...
随机推荐
- spark源码分析以及优化
第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...
- [搬运]Intellij IDEA 汉化
Github地址: https://github.com/pingfangx/TranslatorX
- 网站用https访问的问题
网站挂到阿里云上, 可以http访问, 也可以https访问. 但是如果用https方式访问网站.发现接口报错. 因为接口只提供http方式. 在谷歌浏览器出现: Mixed Content: The ...
- ubuntu 显示桌面快捷键
ubuntu 显示桌面快捷键 快速显示桌面的快捷键是 ctrl + win + d win:就是窗口键,在键盘左侧ctrl与Alt之间的那个建.
- 成为python程序员,对疫情过后的毕业生来说,真是一个不错的方向吗?
Python最近几年,一直被炒得很火,这其中有商业因素,但更重要的是即将到来的人工智能时代,而python就恰好是最适合的编程语言. 所以无论是在职的人,还是在校的学生,都想着跟上这一趋势,但,在今年 ...
- VMware Workstation 15密钥
在打开的VMware Workstation 15输入许可证密钥对话框里直接输入25位密钥,然后点击确定,如下图所示. 这里提供一个密钥: CG392-4PX5J-H816Z-HYZNG-PQRG2
- Maximum Subsequence Sum(java)
7-1 Maximum Subsequence Sum(25 分) Given a sequence of K integers { N1, N2, ..., NK }. A con ...
- Python3-logging模块-日志记录
Python3中的logging模块提供了较为灵活的事件日志系统 日志级别 DEBUG < INFO < WARING(Python默认) < ERROR < FATAL(CR ...
- 【转载】npx 真香
npx 主要提供了一些便捷操作: 调用项目安装的模块 避免全局安装模块 使用不同版本的 node 执行 GitHub 源码 原文地址:http://www.ruanyifeng.com/blog/20 ...
- Flask项目实战:创建电影网站(2)
flask网站制作后台时候常见流程总结 安利一个神神器: 百度脑图PC版 创建数据库 下面是创建User数据库,需要导入db库 #coding:utf8 from flask import Flask ...