美文网首页
Cron获取前一次触发时间(二分查找)

Cron获取前一次触发时间(二分查找)

作者: rekcah1986 | 来源:发表于2024-08-11 17:36 被阅读0次
using System;
using Cronos;

class Program
{
    static void Main(string[] args)
    {
        // 定义一个Cron表达式
        var cronExpression = "45 8 * * 2-5"; // 每周二到周五的8:45
        var cron = CronExpression.Parse(cronExpression);

        // 定义参考时间并转换为UTC时间
        var referenceTime = DateTime.UtcNow;

        // 查找上一次触发时间
        var previousOccurrence = GetPreviousOccurrence(cron, referenceTime);

        Console.WriteLine($"上一次触发时间: {previousOccurrence}");
    }

    static DateTime? GetPreviousOccurrence(CronExpression cron, DateTime referenceTime)
    {
        // 确保上下界都是UTC时间
        DateTime lowerBound = referenceTime.AddMonths(-1).ToUniversalTime(); // 向前1个月,不够的话可以增加
        DateTime upperBound = referenceTime.ToUniversalTime();

        DateTime? result = null;
        const int maxIterations = 100; // 防止无限循环的最大迭代次数
        int iteration = 0;
        // 二分查找
        while (lowerBound <= upperBound && iteration < maxIterations)
        {
            iteration++;
            var midpoint = lowerBound.AddMinutes((upperBound - lowerBound).TotalMinutes / 2);
            var nextOccurrence = cron.GetNextOccurrence(midpoint, inclusive: true);

            if (nextOccurrence == null || nextOccurrence >= referenceTime)
            {
                upperBound = midpoint.AddMinutes(-1);
            }
            else
            {
                result = nextOccurrence;
                lowerBound = nextOccurrence.Value.AddMinutes(1);
            }
        }

        if (iteration >= maxIterations)
        {
            Console.WriteLine("达到最大迭代次数,可能未找到结果。");
        }
        else
        {
            Console.WriteLine("迭代次数: " + iteration);
        }

        return result;
    }
}

输出

迭代次数: 9
上一次触发时间: 2024/8/9 08:45:00

相关文章

  • Android查询算法

    一、获取最小值 二、递归数兔子 三、查找文件 四、二分查找(1)使用递归 (2)二分查找 五、字符串旋转

  • gcd,二分查找

    获取两个数的最大公约数 二分查找

  • Objective-C实现二分查找和插值查找

    二分查找二分查找 又称折半查找,要求数组必须是有序的数列,是一种有序查找算法。二分查找的时间复杂度是O(log n...

  • 2.3 二分查找的递归与非递归实现

    Chapter2: 时间复杂度分析、递归、查找与排序 3. 二分查找的递归与非递归实现 二分查找即折半查找,为查找...

  • 2.3 二分查找的递归与非递归实现

    Chapter2: 时间复杂度分析、递归、查找与排序 3. 二分查找的递归与非递归实现 二分查找即折半查找,为查找...

  • 算法图解系列之二分查找[01]

    1.1 二分查找 1.2 二分查找的运行时间 1.3 大O表示法 1.4 总结

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • 每天学习一点儿算法--散列表

    在之前我们已经学过了二分查找和简单查找,我们知道二分查找的运行时间为O(㏒ n), 简单查找的运行时间为O(n)。...

  • [AlgoGo]二分查找

    二分查找算法用在有序的数据集合中查找目标数据,时间复杂度为O(logn),但限制条件较多。 二分查找的限制 二分查...

网友评论

      本文标题:Cron获取前一次触发时间(二分查找)

      本文链接:https://www.haomeiwen.com/subject/rgkrkjtx.html