从 CRON 表达式中获取分钟数 (c#)

Get minutes from CRON expression (c#)

我正在尝试找到一种从 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)
        );

代码参考:https://github.com/rashadrivera/CronExpression/blob/master/CronExpression/Internals/CronExpressionHelper.cs