#expression-parser #cron #schedule #periodic #repeat

cron_clock

A cron expression parser and schedule explorer. Rich documentation and case studies and related upper-level libraries are available.

12 releases

0.8.0 Oct 4, 2021
0.7.0 Apr 19, 2021
0.6.10 Mar 19, 2021
0.6.7 Feb 2, 2021
0.6.3 Jun 12, 2020

#889 in Parser implementations

Download history 5904/week @ 2024-07-21 6140/week @ 2024-07-28 6359/week @ 2024-08-04 6270/week @ 2024-08-11 6893/week @ 2024-08-18 6976/week @ 2024-08-25 3824/week @ 2024-09-01 3833/week @ 2024-09-08 5022/week @ 2024-09-15 6253/week @ 2024-09-22 7658/week @ 2024-09-29 8981/week @ 2024-10-06 8199/week @ 2024-10-13 7972/week @ 2024-10-20 8535/week @ 2024-10-27 7871/week @ 2024-11-03

33,745 downloads per month
Used in 10 crates (4 directly)

MIT/Apache

74KB
2K SLoC

cron_clock Rust

A cron expression parser. Works with stable Rust v1.28.0. The project is based on zslayton/cron, thank him very much.

In addition to the regular expressions, you can also use the following shortcut expressions with Schedule::from_str, such as @yearly @monthly @weekly @daily @hourly @minutely @secondly, make cron- Expression Iterator.

Tips

If you need a periodicized task manager, you may need delay-timer (Time-manager of delayed tasks. Like crontab, but synchronous asynchronous tasks are possible, and dynamic add/cancel/remove is supported) .

Example

use cron::Schedule;
use chrono::Utc;
use std::str::FromStr;

fn main() {
  //               sec  min   hour   day of month   month   day of week   year
  let expression = "0   30   9,12,15     1,15       May-Aug  Mon,Wed,Fri  2018/2";
  let schedule = Schedule::from_str(expression).unwrap();
  println!("Upcoming fire times:");
  for datetime in schedule.upcoming(Utc).take(10) {
    println!("-> {}", datetime);
  }
}

/*
Upcoming fire times:
-> 2018-06-01 09:30:00 UTC
-> 2018-06-01 12:30:00 UTC
-> 2018-06-01 15:30:00 UTC
-> 2018-06-15 09:30:00 UTC
-> 2018-06-15 12:30:00 UTC
-> 2018-06-15 15:30:00 UTC
-> 2018-08-01 09:30:00 UTC
-> 2018-08-01 12:30:00 UTC
-> 2018-08-01 15:30:00 UTC
-> 2018-08-15 09:30:00 UTC
*/

Example shortcut expressions & ScheduleIteratorOwned

 extern crate chrono;
 extern crate cron_clock;

 use cron_clock::Schedule;
 use chrono::Utc;
 use std::str::FromStr;

 fn main() {
   // shortcut expressions
   let expression = "@hourly";
   let schedule = Schedule::from_str(expression).unwrap();
   println!("Upcoming fire times:");
   // `upcoming_owned` Get iterators with ownership, so you don't have lifetime to worry about.
   for datetime in schedule.upcoming_owned(Utc).take(10) {
     println!("-> {}", datetime);
   }
 }

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~2MB
~37K SLoC