当前位置: 首页 > 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表达式生成器

http://www.dtcms.com/a/256404.html

相关文章:

  • 【设计模式】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常用调试工具汇总
  • MagicTryOn: 变革性的AI视频虚拟试衣体验
  • Java 面试指南:深度解析 Spring Boot 与微服务架构
  • AI 生成 短视频 全流程指南
  • Swift 解锁数组可修改场景:LeetCode 307 高效解法全解析
  • 【软考高级系统架构论文】企业集成平台的技术与应用
  • shell脚本--条件判断
  • uniswap v4 账本式结算与账户余额管理机制解析
  • Wire--编译时依赖注入工具
  • 系统思考VS心智模式
  • Jupyter notebook调试:设置断点运行