Mat*_*iel 9 iso8601 datetime-format rust
我有一个SystemTime变量,我想从那个日期获得 ISO 8601 格式。
She*_*ter 16
将其转换为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);
}
Run Code Online (Sandbox Code Playgroud)
2020-10-01T01:47:12.746202562+00:00
Run Code Online (Sandbox Code Playgroud)
该文档解释了方法的命名选择:
ISO 8601 允许对语法有一定的自由度,而 RFC 3339 则允许严格定义固定格式的自由度
也可以看看:
该计时包是在这里工作的工具。 SystemTime可能是也可能不是 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"
}
Run Code Online (Sandbox Code Playgroud)
要以不同方式自定义格式,请参阅chrono::format::strftime文档。
您还可以使用时间箱(doc)。使用最新的 alpha 版本 (0.3.0-ALPHA-0),您可以
format_into()在提供&mut impl io::Write. 或者,您可以简单地使用format()也与较旧的稳定版本兼容的方法。
use time::{
format_description::well_known::Rfc3339, // For 0.3.0-alpha-0
// Format::Rfc3339, // For 0.2 stable versions
OffsetDateTime
};
use std::time::SystemTime;
fn to_rfc3339<T>(dt: T) -> String where T: Into<OffsetDateTime> {
dt.into().format(&Rfc3339)
}
fn main() {
let now = SystemTime::now();
println!("{}", to_rfc3339(now));
}
Run Code Online (Sandbox Code Playgroud)
您必须添加该formatting功能Cargo.toml才能使用format_into()(即在 v0.3+ 上格式化需要启用该功能)。
请注意,您还可以将您自己的格式strftime字符串指定为format/ format_into。
| 归档时间: |
|
| 查看次数: |
2126 次 |
| 最近记录: |