问题描述
我有一个SystemTime
变量,我想从该日期开始获取ISO 8601格式。
解决方法
chrono软件包是此处工作的正确工具。 SystemTime
可能是UTC,也可能不是UTC,而chrono会处理许多令人烦恼的小细节。
use chrono::prelude::{DateTime,Utc};
fn iso8601(st: &std::time::SystemTime) -> String {
let dt: DateTime<Utc> = st.clone().into();
format!("{}",dt.format("%+"))
// formats like "2001-07-08T00:34:60.026490+09:30"
}
要以其他方式自定义格式,请参见chrono::format::strftime
文档。
将其转换为chrono::DateTime
,然后使用to_rfc3339
:
use chrono::{DateTime,Utc}; // 0.4.15
use std::time::SystemTime;
fn main() {
let now = SystemTime::now();
let now: DateTime<Utc> = now.into();
let now = now.to_rfc3339();
println!("{}",now);
}
2020-10-01T01:47:12.746202562+00:00
方法的文档explain the naming choice:
ISO 8601允许在语法和RFC 3339练习上有一定的自由度,以自由地严格定义固定格式
另请参阅: