cron-exp

Crates.iocron-exp
lib.rscron-exp
version0.1.0
sourcesrc
created_at2021-02-21 03:19:20.38386
updated_at2021-02-21 03:19:20.38386
descriptionA CRON expression parser and explorer designed for space efficiency for caching and storage purposes such as in a CRON Scheduler.
homepage
repositoryhttps://github.com/rust-playground/cron-exp
max_upload_size
id358344
size64,568
Dean Karn (deankarn)

documentation

README

cron-rs

A CRON expression parser and explorer. It is designed for space efficiency for caching and storage purposes such as in a CRON Scheduler.

Example

use chrono::{DateTime, TimeZone, Utc};
use cron_rs::schedule::Schedule;
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();

    let mut last: Option<DateTime<Utc>> = None;
    let from_date = Utc.ymd(2022, 6, 1).and_hms(8, 40, 1);

    println!("Upcoming fire times:");
    for datetime in schedule.iter_from(&from_date).take(10) {
        last = Some(datetime);
        println!("next -> {:?}", datetime);
    }

    println!("\nPrevious fire times:");
    for datetime in schedule.iter_from(&last.unwrap()).rev().take(10) {
        println!("prev -> {:?}", datetime);
    }
}

/*
Upcoming fire times:
next -> 2022-06-01T09:30:00Z
next -> 2022-06-01T12:30:00Z
next -> 2022-06-01T15:30:00Z
next -> 2022-06-15T09:30:00Z
next -> 2022-06-15T12:30:00Z
next -> 2022-06-15T15:30:00Z
next -> 2022-07-01T09:30:00Z
next -> 2022-07-01T12:30:00Z
next -> 2022-07-01T15:30:00Z
next -> 2022-07-15T09:30:00Z

Previous fire times:
prev -> 2022-07-01T15:30:00Z
prev -> 2022-07-01T12:30:00Z
prev -> 2022-07-01T09:30:00Z
prev -> 2022-06-15T15:30:00Z
prev -> 2022-06-15T12:30:00Z
prev -> 2022-06-15T09:30:00Z
prev -> 2022-06-01T15:30:00Z
prev -> 2022-06-01T12:30:00Z
prev -> 2022-06-01T09:30:00Z
prev -> 2020-07-15T15:30:00Z
*/

Crontab:

# ┌─────────────────────  minute (0 - 59)
# │ ┌───────────────────  hour   (0 - 23)
# │ │ ┌─────────────────  dom    (1 - 31) day of month
# │ │ │ ┌───────────────  month  (1 - 12 or Jan-Dec)
# │ │ │ │ ┌─────────────  dow    ((0 or 7) - 6 or Sun - Sat)  day of week (Sunday to Saturday)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>
Field Required Allowed values Allowed special characters
Minutes Yes 0–59 * , - /
Hours Yes 0–23 * , - /
Day of month Yes 1–31 * , - /
Month Yes 1–12 or Jan-Dec * , - /
Day of week Yes (0 or 7)–6 or Sun-Sat * , - /

Vixie CRON:

# ┌───────────────────────  seconds (0 - 59)
# │ ┌─────────────────────  minute  (0 - 59)
# │ │ ┌───────────────────  hour    (0 - 23)
# │ │ │ ┌─────────────────  dom     (1 - 31) day of month
# │ │ │ │ ┌───────────────  month   (1 - 12 or Jan-Dec)
# │ │ │ │ │ ┌─────────────  dow     (1-7 or Sun-Sat)  day of week (Sunday to Saturday)
# │ │ │ │ │ │ ┌──────────── year    (1970-2099 Optional)
# │ │ │ │ │ │ │
# │ │ │ │ │ │ │
# * * * * * * *
Field Required Allowed values Allowed special characters
Seconds Yes 0–59 * , - /
Minutes Yes 0–59 * , - /
Hours Yes 0–23 * , - /
Day of month Yes 1–31 * , - /
Month Yes 1–12 or Jan-Dec * , - /
Day of week Yes 1–7 or Sun-Sat * , - /
Years No 1970-2099 * , - /

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Proteus by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Commit count: 4

cargo fmt