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

cs 复制代码
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表达式生成器

相关推荐
曦月合一1 天前
树莓派安装jdk、tomcat、vnc、谷歌浏览器开机自启等环境配置
java·tomcat·树莓派
Edward111111111 天前
4月28日防火墙问题
linux·运维·服务器
excel1 天前
如何解决 Nuxt DevTools 中关于 unstorage 包的报错
前端
想学后端的前端工程师1 天前
【补充内外网突然不通的情况】
运维·服务器
Rust研习社1 天前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust
此剑之势丶愈斩愈烈1 天前
openssl 自建证书
java
面汤放盐1 天前
何时使用以及何时不应使用微服务:没有银弹
java·运维·云计算
0xDevNull1 天前
Spring Boot 自动装配:从原理到实践
java·spring boot·后端
C澒1 天前
AI 生码 - API2Code:接口智能匹配与 API 自动化生码全链路设计
前端·低代码·ai编程
浔川python社1 天前
HTML头部元信息避坑指南技术文章大纲
前端·html