25个版本
0.9.0 | 2024年2月20日 |
---|---|
0.8.1 | 2023年11月13日 |
0.8.0 | 2023年4月8日 |
0.7.11 | 2023年3月13日 |
0.7.0 | 2019年11月19日 |
#206 在 解析器实现
988 每月下载量
在 12 个 7 直接crate中使用
16KB
182 行
cron解析器
支持时区的cron表达式解析库。
示例
use chrono::{TimeZone, Utc};
use chrono_tz::Europe::Lisbon;
use cron_parser::parse;
fn main() {
if let Ok(next) = parse("*/5 * * * *", &Utc::now()) {
println!("when: {}", next);
}
// passing a custom timestamp
if let Ok(next) = parse("0 0 29 2 *", &Utc.timestamp(1893456000, 0)) {
println!("next leap year: {}", next);
assert_eq!(next.timestamp(), 1961625600);
}
assert!(parse("2-3,9,*/15,1-8,11,9,4,5 * * * *", &Utc::now()).is_ok());
assert!(parse("* * * * */Fri", &Utc::now()).is_err());
// use custom timezone
assert!(parse("*/5 * * * *", &Utc::now().with_timezone(&Lisbon)).is_ok());
}
cron表
# ┌───────────────────── minute (0 - 59)
# │ ┌─────────────────── hour (0 - 23)
# │ │ ┌───────────────── dom (1 - 31) day of month
# │ │ │ ┌─────────────── month (1 - 12)
# │ │ │ │ ┌───────────── dow (0 - 6 or Sun - Sat) day of week (Sunday to Saturday)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>
字段 | 必需 | 允许的值 | 允许的特殊字符 |
---|---|---|---|
分钟 | 是 | 0–59 | * , - / |
小时 | 是 | 0–23 | * , - / |
月份中的某天 | 是 | 1–31 | * , - / |
月份 | 是 | 1–12 | * , - / |
星期中的某天 | 是 | 0–6 或 Sun-Sat | * , - / |
对于星期中的某天,当使用Weekday (Sun-Sat)时,不支持表达式
*/Day
,而是使用整数,原因是以例如*/Wed
=*/3
为例,它表示每3天运行一次,这意味着周日、周三、周六。
*
任何值,
值列表分隔符-
值范围/
步长值
依赖于crate chrono。
示例Cargo.toml
[dependencies]
chrono = "^0.4"
cron-parser = "*"
获取下一个10个闰年的迭代
use chrono::{DateTime, Utc};
use cron_parser::parse;
fn main() {
let now = Utc::now();
let mut crons = Vec::<DateTime<Utc>>::new();
let mut next = parse("0 0 29 2 *", &now).unwrap();
for _ in 0..10 {
next = parse("0 0 29 2 *", &next).unwrap();
crons.push(next);
}
for x in crons {
println!("{} - {}", x, x.timestamp());
}
}
它将打印类似的内容
2024-02-29 00:00:00 UTC - 1709164800
2028-02-29 00:00:00 UTC - 1835395200
2032-02-29 00:00:00 UTC - 1961625600
2036-02-29 00:00:00 UTC - 2087856000
2040-02-29 00:00:00 UTC - 2214086400
2044-02-29 00:00:00 UTC - 2340316800
2048-02-29 00:00:00 UTC - 2466547200
2052-02-29 00:00:00 UTC - 2592777600
2056-02-29 00:00:00 UTC - 2719008000
2060-02-29 00:00:00 UTC - 2845238400
依赖关系
~1MB
~18K SLoC