diff --git a/Cargo.toml b/Cargo.toml index 1d42630..775a537 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "utcnow" -version = "1.2.0" +version = "1.3.0" authors = ["Jonathan Strong "] edition = "2018" diff --git a/src/main.rs b/src/main.rs index 3309028..ac77c15 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,8 +52,14 @@ fn main() { .help("display unix timestamp in seconds, instead of default nanoseconds") .long("seconds") .short("s") - .requires("unix") - .conflicts_with_all(&["rfc2822", "timespec"]) + .conflicts_with_all(&["rfc2822", "timespec", "millis"]) + .required(false) + .takes_value(false)) + .arg(clap::Arg::with_name("millis") + .help("display unix timestamp in milliseconds, instead of default nanoseconds") + .long("millis") + .short("m") + .conflicts_with_all(&["rfc2822", "timespec", "seconds"]) .required(false) .takes_value(false)) .arg(clap::Arg::with_name("timespec") @@ -70,13 +76,17 @@ fn main() { .required(false)) .arg(clap::Arg::with_name("unix-to-rfc3339") .long("unix-to-rfc3339") + .short("R") .alias("unix-to-utc") - .help("convert integer unix timestamp (nanoseconds precision) to datetime in rfc3339 format") + .help("convert integer unix timestamp (nanoseconds precision) to datetime \ + in rfc3339 format. combine with --seconds or --millis to parse a + seconds timestamp with alternate precison") .takes_value(true) .required(false) - .conflicts_with_all(&["unix", "seconds"])) + .conflicts_with_all(&["unix"])) .arg(clap::Arg::with_name("rfc3339-to-unix") .long("rfc3339-to-unix") + .short("U") .alias("utc-to-unix") .help("parse rfc3339 timestamp and display it as a unix timestamp") .takes_value(true) @@ -89,6 +99,15 @@ fn main() { if let Some(ts_str) = args.value_of("unix-to-rfc3339") { // either parse --unix-to-rfc3339 input match u64::from_str(ts_str) { + + // check alternate precisions --seconds or --millis + + Ok(seconds) if args.is_present("seconds") => nanos_to_timespec(seconds * ONE_SECOND), + + Ok(millis) if args.is_present("millis") => nanos_to_timespec(millis * 1_000_000), + + // otherwise go with default nanos + Ok(nanos) => nanos_to_timespec(nanos), Err(e) => { @@ -124,7 +143,8 @@ fn main() { if args.is_present("seconds") { // unix seconds print!("{}{}", sec, endline); - + } else if args.is_present("millis") { // unix millis + print!("{}{}", timespec_to_nanos(sec, nsec) / 1_000_000, endline); } else { // unix nanos print!("{}{}", timespec_to_nanos(sec, nsec), endline); }