将Unix时间戳转换为Rust中的可读时间字符串?

时间:2018-04-28 01:45:28

标签: rust

如何将Unix时间戳1524820690转换为可读的日期时间字符串?

就像在Python中一样:

In [1]: from datetime import datetime
In [2]: print(
   ...:     datetime.fromtimestamp(1284101485).strftime('%Y-%m-%d %H:%M:%S')
   ...: )
2010-09-10 14:51:25

2 个答案:

答案 0 :(得分:2)

我不熟悉Rust,但您应该能够将Unix时间戳转换为整数(i64),而不是使用NaiveDateTime中的chrono将时间戳转换为格式化字符串。

这是一个例子......

extern crate chrono;

use chrono::prelude::*;

fn main()
{
    // Convert the timestamp string into an i64
    let timestamp = "1524820690".parse::<i64>().unwrap();

    // Create a NaiveDateTime from the timestamp
    let naive = NaiveDateTime::from_timestamp(timestamp, 0);

    // Create a normal DateTime from the NaiveDateTime
    let datetime: DateTime<Utc> = DateTime::from_utc(naive, Utc);

    // Format the datetime how you want
    let newdate = datetime.format("%Y-%m-%d %H:%M:%S");

    // Print the newly formatted date and time
    println!("{}", newdate);
}

我使用了你的Python时间格式,但Rust中的格式可能不同。

答案 1 :(得分:2)

感谢@ coffeed-up-hacker的回答。它给了我很多帮助。

我尝试了很多不同的方法,看起来内置函数无法将SystemTime格式化为可读时间字符串。

最后,我发现了一种更好的方法,它适用于各种情况:

extern crate chrono;
use chrono::prelude::DateTime;
use chrono::{Utc};
use std::time::{SystemTime, UNIX_EPOCH, Duration};


fn main(){
    // Creates a new SystemTime from the specified number of whole seconds
    let d = UNIX_EPOCH + Duration::from_secs(1524885322);
    // Create DateTime from SystemTime
    let datetime = DateTime::<Utc>::from(d);
    // Formats the combined date and time with the specified format string.
    let timestamp_str = datetime.format("%Y-%m-%d %H:%M:%S.%f").to_string();
    println!{"{}",timestamp_str};
}

输出:

2018-04-28 03:15:22.000000000

要获取本地时间字符串,只需使用:DateTime::<Local>::from(d)

此外,我们可以使用Duration::from_millisDuration::from_microsDuration::from_nanos将毫秒,微秒,纳秒转换为可读字符串。