Rust 日期时间命令行工具

180it 2023-03-08 PM 430℃ 0条

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

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

Rust 日期时间命令行工具