当前位置: 首页 > news >正文

quartz 表达式最近10次执行时间接口编写

Nuget安装

<PackageReference Include="CronExpressionDescriptor" Version="2.41.0" />
<PackageReference Include="CronExpressionDescriptor-zh-CN" Version="2.32.0" />
<PackageReference Include="Quartz" Version="3.14.0" />

Post 接口:Mock

using System.Diagnostics;
using CronExpressionDescriptor;
using Microsoft.AspNetCore.Mvc;
using Quartz;
using SaaS.OfficialWebSite.Web.Models;namespace SaaS.OfficialWebSite.Web.Controllers
{public class HomeController : Controller{private readonly ILogger<HomeController> _logger;public HomeController(ILogger<HomeController> logger){_logger = logger;}public IActionResult Index(){return View();}public IActionResult CronDescr(){return View();}[HttpPost]public IActionResult Mock(MockCronRequest cronRequest){var mockCronResponse = new MockCronResponse { Data = new MockCronModel { } };try{var cronDescription = CronExpressionDescriptor.ExpressionDescriptor.GetDescription(cronRequest.Cron, new Options(){DayOfWeekStartIndexZero = true,Use24HourTimeFormat = true,Locale = "zh-CN"});mockCronResponse.Data.CronDescription = cronDescription;var count = 10;// 计算并输出执行时间点var fireTimes = GetNextFireTimes(cronRequest.Cron, count);Console.WriteLine($"表达式: {cronRequest.Cron}");Console.WriteLine($"接下来 {count} 次执行时间点:");Console.WriteLine("-------------------------------");mockCronResponse.Data.NextTriggers = new List<string>();for (int i = 0; i < fireTimes.Count; i++){var next = $"{fireTimes[i]:yyyy-MM-dd HH:mm:ss.fff}";Console.WriteLine(next);mockCronResponse.Data.NextTriggers.Add(next);}mockCronResponse.Success = true;}catch (Exception ex){_logger.LogError(ex.Message, ex);mockCronResponse.Success = false;mockCronResponse.Message = ex.Message;}return Ok(mockCronResponse);}public static List<DateTimeOffset> GetNextFireTimes(string cronExpression, int count, DateTimeOffset? startTime = null){var results = new List<DateTimeOffset>();// 获取北京时间时区TimeZoneInfo chinaTimeZone = TimeZoneInfo.FindSystemTimeZoneById(OperatingSystem.IsWindows() ?"China Standard Time" :"Asia/Shanghai");// 设置起始时间为当前北京时间startTime ??= TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, chinaTimeZone);// 创建Cron表达式解析器(指定北京时间时区)var cronTrigger = (ICronTrigger)TriggerBuilder.Create().WithCronSchedule(cronExpression, x => x.InTimeZone(chinaTimeZone)).Build();// 获取后续触发时间点DateTimeOffset? current = startTime;for (int i = 0; i < count; i++){current = cronTrigger.GetFireTimeAfter(current);if (!current.HasValue) break;// 确保时间点是北京时间results.Add(TimeZoneInfo.ConvertTime(current.Value, chinaTimeZone));}return results;}}
}

运行效果:Cron表达式生成器

相关文章:

  • 【设计模式】3.装饰模式
  • leetcode332.重新安排行程:优先队列与DFS实现欧拉路径的行程规划
  • AIGC工具平台-SadTalker音频对口型数字人
  • Linux 内核中 TCP 协议栈的输出实现:tcp_output.c 文件解析
  • 2D曲线点云平滑去噪
  • (LeetCode 面试经典 150 题) 169. 多数元素(哈希表 || 二分查找)
  • python基础(while...else)
  • 手撕lru
  • MinIO入门教程:从零开始搭建方便快捷的分布式对象存储服务
  • 蓝桥杯备赛篇(上) - 参加蓝桥杯所需要的基础能力 1(C++)
  • 【Linux第四章】gcc、makefile、git、GDB
  • 用OBS Studio录制WAV音频,玩转语音克隆和文本转语音!
  • MySQL之InnoDB存储引擎深度解析
  • PowerShell读取CSV并遍历组数组
  • 3.8 恢复行为
  • 微处理器原理与应用篇---冯诺依曼体系结构
  • 一文详解归并分治算法
  • Python元组常用操作方法
  • 在 ArcPy 脚本中进行错误处理和调试
  • C# WPF常用调试工具汇总
  • 天津专业做网站的公司有哪些/网站优化关键词排名公司
  • wordpress站点统计代码/常见的网络营销方式有哪几种
  • 南皮做网站/2345网止导航
  • 中国企业500强企业名单/商丘网站优化公司
  • 索牛网站建设/自媒体发布平台有哪些
  • 王府井网上商城官网/关键词排名快照优化