如何将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
答案 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_millis
或Duration::from_micros
或Duration::from_nanos
将毫秒,微秒,纳秒转换为可读字符串。