feat: add current-time-rs

This commit is contained in:
2024-12-29 00:16:59 +08:00
parent 8eddfc02e7
commit a3707f6d97
5 changed files with 319 additions and 0 deletions

69
current-time-rs/src/main.rs Executable file
View 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
}