Rust 日期时间命令行工具
本文代码 https://github.com/tothis/rust-record/tree/main/cli/time
当前日期和时间戳
cargo run
解析时间
cargo run "2020-02-20 02:04:08.000"
解析时间戳
cargo run 1582135448000
Cargo.toml
[package]
name = "time"
version = "0.1.0"
authors = ["Li Lei <this.lilei@gmail.com>"]
edition = "2021"
[dependencies]
chrono = "0.4"
lib.rs
use std::env::Args;
use chrono::{Local, TimeZone};
pub const FORMAT: &str = "%F %H:%M:%S%.3f";
pub fn parse_time(mut args: Args) {
let date = match args.next() {
Some(arg) => {
match arg.parse::<i64>() {
// 可以转为 i64 则为时间戳
Ok(arg_value) => Local.timestamp_millis(arg_value).format(FORMAT).to_string(),
Err(_) => {
match Local.datetime_from_str(&arg, FORMAT) {
Ok(nav_date) => nav_date.timestamp_millis().to_string(),
Err(e) => {
eprintln!("参数 date 解析失败 {}", e);
return;
}
}
}
}
}
None => {
eprintln!("参数 date 不存在");
return;
}
};
println!("{}", date);
}
#[cfg(test)]
mod tests {
use chrono::{Local, TimeZone};
use crate::FORMAT;
#[test]
fn test() {
let time_str = "2020-02-20 02:04:08.000";
let timestamp = 1582135448000;
assert_eq!(time_str, Local.timestamp_millis(timestamp).format(FORMAT).to_string());
assert_eq!(timestamp, Local.datetime_from_str(time_str, FORMAT).unwrap().timestamp_millis());
}
}
main.rs
use std::env;
use chrono::Local;
use time::{FORMAT, parse_time};
fn main() {
let mut args = env::args();
if args.len() == 1 {
let now = Local::now();
println!("{}", now.format(FORMAT));
println!("{}", now.timestamp_millis());
return;
}
args.next();
if args.len() == 1 {
parse_time(args)
}
}
————————————————
原文链接:https://blog.csdn.net/setlilei/article/details/117327935
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询