如何将字符串转换为chrono::DateTimechrono::NaiveDateTime

ParseError(NotEnough)或ParseError(TooShort)是什么意思?

推荐答案

将字符串转换为Chrono对象时,必须知道字符串的输入格式包含哪些部分

当没有足够的信息来填充整个对象时,就会显示ParseError(NotEnough).例如,缺少日期、时间或时区

字符串格式规范,例如"%Y-%m-%d %H:%M:%S":https://docs.rs/chrono/latest/chrono/format/strftime/index.html

RFC2822=日期+时间+时区

要转换RFC2822字符串,请使用parse_from_rfc2822(..)函数.

let date_str = "Tue, 1 Jul 2003 10:52:37 +0200";
let datetime = 日期时间::parse_from_rfc2822(date_str).unwrap();

RFC3339=日期+时间+时区

要转换RFC3339 or ISO 8601字符串,请使用parse_from_rfc3339(..)函数.

let date_str = "2020-04-12T22:10:57+02:00";
// convert the string into 日期时间<FixedOffset>
let datetime = 日期时间::parse_from_rfc3339(date_str).unwrap();
// convert the string into 日期时间<Utc> or other timezone
let datetime_utc = datetime.with_timezone(&Utc);

日期+时间+时区(其他或非标准)

要转换其他日期时间字符串,请使用parse_from_str(..)函数.

let date_str = "2020-04-12 22:10:57 +02:00";
let datetime = 日期时间::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S %z").unwrap();

日期+时间

当你没有时区时,你需要使用Naive日期时间.此对象不存储时区:

let date_str = "2020-04-12 22:10:57";
let naive_datetime = Naive日期时间::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S").unwrap();

日期

如果我们解析一个日期(没有时间),我们可以将它存储在一个Naive日期.此对象不存储时间或时区:

let date_str = "2020-04-12";
let naive_date = Naive日期::parse_from_str(date_str, "%Y-%m-%d").unwrap();

时间

如果我们解析一个时间(没有日期),我们可以将其存储在Naive时间中.此对象不存储日期或时区:

let time_str = "22:10:57";
let naive_time = Naive时间::parse_from_str(time_str, "%H:%M:%S").unwrap();

Add 日期, 时间 and/or 时间zone

如果我们有一些字符串,并想添加更多信息,我们可以更改类型.但你必须自己提供这些信息.

let date_str = "2020-04-12";
// From string to a Naive日期
let naive_date = Naive日期::parse_from_str(date_str, "%Y-%m-%d").unwrap();
// Add some default time to convert it into a Naive日期时间
let naive_datetime: Naive日期时间 = naive_date.and_hms(0,0,0);
// Add a timezone to the object to convert it into a 日期时间<UTC>
let datetime_utc = 日期时间::<Utc>::from_utc(naive_datetime, Utc);

示例代码:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d2b83b3980a5f8fb2e798271766b4541

Rust相关问答推荐

为什么我们不能通过指针算法将Rust原始指针指向任意地址?'

如何从铁 rust 中呼唤_mm_256_mul_ph?

铁 rust 中的共享对象实现特征

交换引用时的生命周期

无法定义名为&new&的关联函数,该函数的第一个参数不是self

我是否可以在Ruust中修改 struct 实例上的字符串,以使其在修改后具有相同的字符串生存期?

为什么Rust不支持带关联常量的特征对象?

写入引用会更新基础值,但引用会打印意外的值

获取已知数量的输入

如何设置activx websocket actorless的消息大小限制?

是否可以在不直接重复的情况下为许多特定类型实现一个函数?

我们可以在 Rust 切片中使用步骤吗?

如何为整数切片定义一个带有额外函数的特性别名?

从Rust 的临时文件中创建引用是什么意思?

有什么办法可以追踪泛型的单态化过程吗?

如何从 x86_64 Mac 构建 M1 Mac?

如果不满足条件,如何在 Rust 中引发错误

只有一个字符被读入作为词法分析器的输入

将 (T, ()) 转换为 T 安全吗?

在 Rust 中组合特征的不同方法是否等效?