如何在 Rust 中将 SystemTime 转换为 ISO 8601?
How do I convert a SystemTime to ISO 8601 in Rust?
我有一个 SystemTime
变量,我想从那个日期开始获取 ISO 8601 格式。
将其转换为 chrono::DateTime
then use 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 allows some freedom over the syntax and RFC 3339 exercises that freedom to rigidly define a fixed format
另请参阅:
chrono 包是完成这里工作的正确工具。 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"
}
要以不同方式自定义格式,请参阅 chrono::format::strftime
文档。
您也可以使用 time crate (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));
}
您必须将 formatting
功能添加到您的 Cargo.toml
才能使用 format_into()
(即 v0.3+ 上的格式需要启用该功能)。
请注意,您也可以将自己的 strftime
-like format 字符串指定为 format
/format_into
。
我有一个 SystemTime
变量,我想从那个日期开始获取 ISO 8601 格式。
将其转换为 chrono::DateTime
then use 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 allows some freedom over the syntax and RFC 3339 exercises that freedom to rigidly define a fixed format
另请参阅:
chrono 包是完成这里工作的正确工具。 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"
}
要以不同方式自定义格式,请参阅 chrono::format::strftime
文档。
您也可以使用 time crate (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));
}
您必须将 formatting
功能添加到您的 Cargo.toml
才能使用 format_into()
(即 v0.3+ 上的格式需要启用该功能)。
请注意,您也可以将自己的 strftime
-like format 字符串指定为 format
/format_into
。