如何将 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 也可以完美工作
我有许多服务 运行 每天都基于传递给它们的 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 也可以完美工作