Пример #1
0
        /// <summary>
        /// 获取 Cron 表达式下一个发生时间
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="cronFormat"></param>
        /// <returns></returns>
        public static DateTime?GetCronNextOccurrence(string expression, CronFormat cronFormat = CronFormat.Standard)
        {
            // 解析 Cron 表达式
            var cronExpression = CronExpression.Parse(expression, cronFormat);

            // 获取下一个执行时间
            var nextTime = cronExpression.GetNextOccurrence(DateTimeOffset.Now, TimeZoneInfo.Local);

            return(nextTime?.DateTime);
        }
Пример #2
0
        /// <summary>
        /// 开始执行 Cron 表达式任务
        /// </summary>
        /// <param name="expression">Cron 表达式</param>
        /// <param name="doWhat"></param>
        /// <param name="workerName"></param>
        /// <param name="description"></param>
        public static void Do(string expression, Action <SpareTimer, long> doWhat = default, string workerName = default, string description = default)
        {
            Do(() =>
            {
                // 解析 Cron 表达式
                var cronExpression = CronExpression.Parse(expression, CronFormat.IncludeSeconds);

                // 获取下一个执行时间
                var nextTime = cronExpression.GetNextOccurrence(DateTimeOffset.Now, TimeZoneInfo.Local);
                return(nextTime?.DateTime);
            }, doWhat, workerName, description);
        }
Пример #3
0
        /// <summary>
        /// 获取 Cron 表达式下一个发生时间
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="cronFormat"></param>
        /// <returns></returns>
        public static DateTimeOffset?GetCronNextOccurrence(string expression, CronFormat?cronFormat = default)
        {
            // 支持从配置模板读取
            var realExpression = expression.Render();

            // 自动化 CronFormat
            if (cronFormat == default)
            {
                var parts = realExpression.Split(' ', StringSplitOptions.RemoveEmptyEntries);
                cronFormat = parts.Length <= 5 ? CronFormat.Standard : CronFormat.IncludeSeconds;
            }

            // 解析 Cron 表达式
            var cronExpression = CronExpression.Parse(realExpression, cronFormat.Value);

            // 获取下一个执行时间
            var nextTime = cronExpression.GetNextOccurrence(DateTimeOffset.UtcNow, TimeZoneInfo.Local);

            return(nextTime);
        }