如何将 java cron 表达式转换为 'number of times per day' 值?

How do I convert java cron expressions into a 'number of times per day' value?

我有许多服务 运行 每天都基于传递给它们的 cron 值。我正在开发一项服务,该服务需要知道每项服务每天完成其工作的次数。是否可以将 cron 表达式转换为 Java 1.8 中的 'number per day/week'?仅供参考,我在一个 spring 启动项目中,以防万一有什么不同。

例如,假设我有一个像0 1 0-20/4 * * *这样的表达式。该工作每天 运行 5 次。我有这样的想法:

float dailyUploads = someLibrary.cronToFloat("0 1 0-20/4 * * *");

其中 dailyUploads == 5.0

当我 google 这样做时,大多数结果只处理创建 cron 表达式。关于将 cron 转换为日期时间值,我确实发现 one 有趣 post。

我突然想到我可以使用 cron 序列生成器(在上面链接的答案中提到)进行排序,直到日期发生变化,然后计算结果,但这只给我那一天的结果; 运行 每年一次的服务怎么样?我只是找不到一个干净的方法来做到这一点。

感谢您的帮助。

一种方法是使用像 http://cron-parser.com/ 这样的库。这样,您就可以拥有如下所示的代码:

import com.cronutils.descriptor.CronDescriptor;
import com.cronutils.model.definition.CronDefinition;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.parser.CronParser;

import java.util.Locale;

import static com.cronutils.model.CronType.QUARTZ;

// ...

    final String expr = "0 * * 1-3 * ? *";
    
    CronDefinition cronDefinition =
            CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);

    CronParser parser = new CronParser(cronDefinition);

    CronDescriptor descriptor = CronDescriptor.instance(Locale.UK);

    String description = descriptor.describe(parser.parse(expr));

输出如下:

every minute every day between 1 and 3

cron-utils 也可以完美工作