feat: add current-time-rs
This commit is contained in:
69
current-time-rs/src/main.rs
Executable file
69
current-time-rs/src/main.rs
Executable file
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env runrs
|
||||
|
||||
//! ```cargo
|
||||
//! [dependencies]
|
||||
//! clap = { version = "4.5.23", features = ["derive"] }
|
||||
//! ```
|
||||
|
||||
use clap::Parser;
|
||||
use std::time::SystemTime;
|
||||
|
||||
/// Simple program to greet a person
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(version, about, long_about = None)]
|
||||
struct Args {
|
||||
/// New line
|
||||
#[arg(long)]
|
||||
new_line: bool,
|
||||
/// Add time (e.g. 1s (second), 1m (minute), 1h (hour), 1d (day), 1M (month), 1y (year) )
|
||||
#[arg(short, long)]
|
||||
add_time: Option<String>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args = Args::parse();
|
||||
|
||||
let current_time_millis = SystemTime::now()
|
||||
.duration_since(SystemTime::UNIX_EPOCH)
|
||||
.unwrap()
|
||||
.as_millis();
|
||||
let add_time_millis = parse_add_time(&args.add_time);
|
||||
let final_time_millis = current_time_millis as i128 + add_time_millis;
|
||||
|
||||
if args.new_line {
|
||||
println!("{}", final_time_millis);
|
||||
} else {
|
||||
print!("{}", final_time_millis);
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_add_time(add_time: &Option<String>) -> i128 {
|
||||
let add_time = match add_time {
|
||||
None => return 0,
|
||||
Some(add_time) if add_time.len() < 2 => return 0,
|
||||
Some(add_time) => add_time,
|
||||
};
|
||||
|
||||
let add_time_chars = add_time.chars().collect::<Vec<_>>();
|
||||
let add_time_number = add_time_chars[0..add_time_chars.len() - 1]
|
||||
.iter()
|
||||
.collect::<String>();
|
||||
let last_char = add_time_chars[add_time_chars.len() - 1];
|
||||
|
||||
let number: i128 = match add_time_number.parse() {
|
||||
Err(_e) => return 0,
|
||||
Ok(number) => number,
|
||||
};
|
||||
|
||||
let add_time_millis = match last_char {
|
||||
's' => number * 1000,
|
||||
'm' => number * 1000 * 60,
|
||||
'h' => number * 1000 * 60 * 60,
|
||||
'd' => number * 1000 * 60 * 60 * 20,
|
||||
'M' => number * 1000 * 60 * 60 * 20 * 30,
|
||||
'y' => number * 1000 * 60 * 60 * 20 * 365,
|
||||
_ => return 0,
|
||||
};
|
||||
|
||||
add_time_millis
|
||||
}
|
||||
Reference in New Issue
Block a user