如何将SystemTime格式化为字符串?

PEN*_*ONG 5 time rust

似乎我无法SystemTime变成一个字符串.我必须使用SystemTime因为我需要从中返回的值std::fs::Metadata::created().

Pet*_*all 8

您应该使用Chrono进行格式化支持.从Chrono v0.4.0开始,这更容易,因为它现在实现了以下的直接转换std::time::SystemTime:

extern crate chrono;
use chrono::offset::Utc;
use chrono::DateTime;
use std::time::SystemTime;

let system_time = SystemTime::now();
let datetime: DateTime<Utc> = system_time.into();
println!("{}", datetime.format("%d/%m/%Y %T"));
Run Code Online (Sandbox Code Playgroud)

如果您想要以本地时区而不是UTC的时间,请使用Local而不是Utc.

有关格式说明符的完整列表,请参阅Chrono文档.

  • 这仍然是 2021 年最好的方式吗?我真的希望 Rust stdlib 支持 SystemTime 显示。 (18认同)

Yen*_*ang 5

time板条箱现在是chrono. 有关从 中返回 a 的详细信息,请参阅该format()方法。在制作格式化字符串时,还要确保检查说明符表。StringOffsetDateTimestrftime

use time::OffsetDateTime;
use std::time::SystemTime;

fn systemtime_strftime<T>(dt: T, format: &str) -> String
   where T: Into<OffsetDateTime>
{
    dt.into().format(format)
}

fn main() {
    let st = SystemTime::now();
    println!("{}", systemtime_strftime(st, "%d/%m/%Y %T"));
}
Run Code Online (Sandbox Code Playgroud)