Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
jmrozanec__cron-utils_CVE-2021-41269_9-1-5 — Java 库,用于解析、验证、迁移和描述 cron 表达式,支持多种格式(Unix、Quartz、Spring)以及人类可读的、特定于区域设置的输出。 | Kitploit
工具/GitHubGitHub/shoucheng3/jmrozanec__cron-utils_cve-2021-41269_9-1-5
通用工具脚本与自动化实用工具与框架学习与教育
GitHubshoucheng3/jmrozanec__cron-utils_cve-2021-41269_9-1-5

jmrozanec__cron-utils_CVE-2021-41269_9-1-5

Java 库,用于解析、验证、迁移和描述 cron 表达式,支持多种格式(Unix、Quartz、Spring)以及人类可读的、特定于区域设置的输出。

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
410个月前尚未审核

cron-utils

我们定义 cron,并支持它们。

cron-utils 是一个 Java 库,用于定义、解析、验证和迁移 cron,以及获取它们的人类可读描述。该项目遵循语义化版本约定,提供 OSGi 元数据,并使用 Apache 2.0 许可证。

Gitter Chat Build Status Quality Gate

下载

cron-utils 可在 Maven 中央仓库 获取。

root@kitploit:~
<dependency>
    <groupId>com.cronutils</groupId>
    <artifactId>cron-utils</artifactId>
    <version>9.2.1</version>
</dependency>

对于 Android 开发者,cron-utils 7.0.0 要求 Android 26 及以上版本。对于更早的 Android 版本,请考虑使用 cron-utils 6.0.6。 如果使用 Java EE 中的 ScheduleExpression,则应将其作为运行时依赖提供。

当前开发

我们目前正在将代码库升级至 JDK 16,以确保在 JDK 17 发布时能完全兼容。

现在我们正在使用神经翻译开发新一代 cron 描述符!欢迎任何形式的贡献:从数据集生成的帮助,到机器学习模型训练以及加载它们的实用工具!如果感兴趣,请关注 issue #3

功能特性

  • 创建任意 cron 表达式:你可以定义自己的 cron 格式!支持的字段有:秒、分钟、小时、日(月)、月、星期、年。
  • 你可以将最后一个字段标记为可选!
  • 支持所有 cron 特殊字符:* / , -
    • 同样支持非标准字符 L、W、LW、'?' 和 #!
  • 支持 cron 扩展/昵称:@yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly, @reboot
  • 输出为特定区域设置的人类可读格式(完全支持中文、英语、德语、希腊语、印尼语、日语、韩语、波兰语、罗马尼亚语、西班牙语、斯瓦希里语和土耳其语。荷兰语、法语、意大利语、葡萄牙语和俄语提供基本支持)。
  • 解析和描述过程解耦:解析一次即可对结果进行操作!
  • 使用 CronBuilder 构建 cron 表达式:
    • 无需记住每个 cron 提供商的字段和约束。
    • cron 与 cron 提供商解耦:随时可以导出为另一种格式。
  • 检查 cron 表达式是否等价。
  • 将多个 cron 表达式压缩为一个!
  • 验证 cron 字符串表达式是否匹配某个 cron 定义。
  • 在不同 cron 定义之间转换 cron:如果需要迁移表达式,CronMapper 可以帮到你!
  • 提供以下 cron 库的预定义定义:
    • Unix
    • Cron4j
    • Quartz
    • Spring。我们支持两种定义:v5.3 之前和 从 v5.3 起。
  • 获取上次/下次执行时间,以及距离上次执行/下次执行的时间。
  • 计算两天之间的执行次数,并基于执行频率比较 cron。
  • 获取两个日期之间的工作日天数,考虑不同的周末策略以及节假日。
  • 需要在不同的 cron/时间库之间映射常量?请使用 ConstantsMapper。

使用示例

下面我们展示一些示例。你可以在我们创建的示例仓库中找到这些及其他示例,该仓库用于展示 cron-utils 库!

构建 cron 定义

root@kitploit:~
// Define your own cron: arbitrary fields are allowed and last field can be optional
CronDefinition cronDefinition =
    CronDefinitionBuilder.defineCron()
        .withSeconds().and()
        .withMinutes().and()
        .withHours().and()
        .withDayOfMonth()
            .supportsHash().supportsL().supportsW().and()
        .withMonth().and()
        .withDayOfWeek()
            .withIntMapping(7, 0) //we support non-standard non-zero-based numbers!
            .supportsHash().supportsL().supportsW().and()
        .withYear().optional().and()
        .instance();

// or get a predefined instance
cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);

构建 cron 表达式

root@kitploit:~
// Create a cron expression. CronMigrator will ensure you remain cron provider agnostic
import static com.cronutils.model.field.expression.FieldExpressionFactory.*;

Cron cron = CronBuilder.cron(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ))
    .withYear(always())
    .withDoM(between(SpecialChar.L, 3))
    .withMonth(always())
    .withDoW(questionMark())
    .withHour(always())
    .withMinute(always())
    .withSecond(on(0))
    .instance();
// Obtain the string expression
String cronAsString = cron.asString(); // 0 * * L-3 * ? *

解析

root@kitploit:~
// Create a parser based on provided definition
CronParser parser = new CronParser(cronDefinition);
Cron quartzCron = parser.parse("0 23 * ? * 1-5 *");

... 甚至多 cron 表达式!如何将多个 cron 合并到一行?与其编写 0 0 9 * * ? *、0 0 10 * * ? *、0 30 11 * * ? * 和 0 0 12 * * ? *,我们可以将其包装成 0 0|0|30|0 9|10|11|12 * * ? *

描述

root@kitploit:~
// Create a descriptor for a specific Locale
CronDescriptor descriptor = CronDescriptor.instance(Locale.UK);

// Parse some expression and ask descriptor for description
String description = descriptor.describe(parser.parse("*/45 * * * * ?"));
// Description will be: "every 45 seconds"

description = descriptor.describe(quartzCron);
// Description will be: "every hour at minute 23 every day between Monday and Friday"
// which is the same description we get for the cron below:
descriptor.describe(parser.parse("0 23 * ? * MON-FRI *"));

迁移

root@kitploit:~
// Migration between cron libraries has never been so easy!
// Turn cron expressions into another format by using CronMapper:
CronMapper cronMapper = CronMapper.fromQuartzToCron4j();

Cron cron4jCron = cronMapper.map(quartzCron);
// and to get a String representation of it, we can use
cron4jCron.asString();//will return: 23 * * * 1-5

验证

root@kitploit:~
cron4jCron.validate()

计算距上次/下次执行的时间

root@kitploit:~
// Get date for last execution
ZonedDateTime now = ZonedDateTime.now();
ExecutionTime executionTime = ExecutionTime.forCron(parser.parse("* * * * * ? *"));
ZonedDateTime lastExecution = executionTime.lastExecution(now);

// Get date for next execution
ZonedDateTime nextExecution = executionTime.nextExecution(now);

// Time from last execution
Duration timeFromLastExecution = executionTime.timeFromLastExecution(now);

// Time to next execution
Duration timeToNextExecution = executionTime.timeToNextExecution(now);

在库之间映射常量

root@kitploit:~
// Map day of week value from Quartz to JodaTime
int jodatimeDayOfWeek =
        ConstantsMapper.weekDayMapping(
                ConstantsMapper.QUARTZ_WEEK_DAY,
                ConstantsMapper.JODATIME_WEEK_DAY
        );

人类可读的日期和时间格式化!

使用 htime —— 面向 Java 的人类可读日期时间格式化! 尽管此功能未打包在同一个 jar 中,但它是你可能觉得有用的 cron-utils 项目。

root@kitploit:~
// You no longer need to remember "YYYY-MM-dd KK a" patterns.
DateTimeFormatter formatter = 
	    HDateTimeFormatBuilder
		    .getInstance()
		    .forJodaTime()
		    .getFormatter(Locale.US)
		    .forPattern("June 9, 2011");
String formattedDateTime = formatter.print(lastExecution);
// formattedDateTime will be lastExecution in "dayOfWeek, Month day, Year" format

cron-utils 命令行工具

我们提供了一个简单的 CLI 接口,可直接在控制台中使用 cron-utils,无需编写新项目!CLI 是一个附属项目,可在 cron-utils-cli 获取

  • 用法:java -jar cron-utils.jar com.cronutils.cli.CronUtilsCLI --validate -f [CRON4J|QUARTZ|UNIX] -e '<cron expression>'

  • 示例:java -jar cron-utils.jar com.cronutils.cli.CronUtilsCLI --validate -f UNIX -e '* 1 * * *'

如果你想要一个不需要“cp”的独立 jar,请使用以下命令构建 uber jar:

root@kitploit:~
mvn assembly:assembly -DdescriptorId=jar-with-dependencies

然后,使用以下命令启动 cli-utils(构建在 target 目录中):

root@kitploit:~
java -jar cron-utils-<version>-jar-with-dependencies.jar com.cronutils.cli.CronUtilsCLI --validate -f [CRON4J|QUARTZ|UNIX] -e '<cron expression>'`

贡献与支持!

欢迎贡献!你可以通过以下方式贡献:

  • 给这个仓库点星标!
  • 请求或添加新功能。查看我们的路线图!
  • 改进现有代码:例如:提供更准确的描述场景
  • 测试
  • 完善文档
  • 提供翻译以支持新的语言区域
  • 提出建议和报告 bug
  • 帮助宣传
  • 告诉我们你是如何使用它的!我们期待在我们的 wiki中列出你!

查看我们的主页!关于项目的统计数据,你可以访问我们的 OpenHUB 页面。

其他 cron-utils 项目

欢迎访问和使用以下 cron-utils 项目:

  • htime:一个 Java 库,让人类可以轻松地格式化日期。你不再需要记住日期时间格式化字符:只需写一个示例,就能获得相应的格式化器。
  • cron-utils-spring:一个 Java 库,可在 Spring 框架中使用 cron-utils,以人类可读的语言描述 cron 表达式。
  • cron-utils-cli:通过 CLI 提供 cron-utils 功能。
  • cron-utils-sisyphus:一个支持多种 cron 记法的 Scala 调度器。
  • cron-utils-scheduler:一个基于 cron-utils 库的 Java 任务调度器。
下载工具