【发布时间】:2022-01-05 13:22:32
【问题描述】:
我正在尝试找到一种从 CRON 表达式中获取特定值的方法。
例如我有这个 CRON 表达式"*/5 * * * *",我需要得到分钟。结果必须是 5。我发现它是使用 NCrontab 库的示例。它显示了如何获取时间表:
var schedule = CrontabSchedule.Parse("*/5 * * * *");
有没有办法解决这个问题?
【问题讨论】:
我正在尝试找到一种从 CRON 表达式中获取特定值的方法。
例如我有这个 CRON 表达式"*/5 * * * *",我需要得到分钟。结果必须是 5。我发现它是使用 NCrontab 库的示例。它显示了如何获取时间表:
var schedule = CrontabSchedule.Parse("*/5 * * * *");
有没有办法解决这个问题?
【问题讨论】:
如果您只需要分钟,则不需要 NCrontab 库。你可以自己解析这个很简单。
var expression = "*/5 * * * *";
var split = expression.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (split.Length < 5)
throw new Exception("Invalid CRON expression");
var onlyDigits = "0123456789";
// strip non numeric chars
var minutes = new string(split[0].Where(c => onlyDigits.Contains(c)).ToArray());
【讨论】:
我使用正则表达式。试试这个:
internal static Match GetExpressionRegex(string expression)
=> Regex.Match(
expression,
"(?<Minutes>[0-9*,/-]+) (?<Hours>[0-9*,/-]+) (?<Days>[0-9*,/-]+) (?<Month>[0-9*,/\\-a-z]+) (?<DayOfWeek>[0-9*,/\\-a-z]+)",
RegexOptions.Singleline,
TimeSpan.FromSeconds(0.2)
);
【讨论】: