rust-chrono中的ParseError(NotEnough)是什么意思?

12

我正在使用rust-chrono,并尝试解析这样的日期:

extern crate chrono;

use chrono::*;

fn main() {

    let date_str = "2013-02-14 15:41:07";
    let date = DateTime::parse_from_str(&date_str, "%Y-%m-%d %H:%M:%S");
    match date {
        Ok(v) => println!("{:?}", v),
        Err(e) => println!("{:?}", e)
    }

}

这是输出结果:

ParseError(NotEnough)

这是什么意思?不足的是什么?我应该使用其他库吗?

3个回答

11

实现Error的类型通过Error::descriptionDisplay拥有更加用户友好的错误信息:

Err(e) => println!("{}", e)

这将打印:

输入不足以生成唯一的日期和时间

推测原因是您没有提供时区,因此时间是模糊的。


5

你应该使用

UTC.datetime_from_str(&date_str, "%Y-%m-%d %H:%M:%S");

就像:

extern crate chrono;

use chrono::*;

fn main() {

    let date_str = "2013-02-14 15:41:07";
    let date = UTC.datetime_from_str(&date_str, "%Y-%m-%d %H:%M:%S");
    match date {
        Ok(v) => println!("{:?}", v),
        Err(e) => println!("{:?}", e)
    }

}

1
更新:NaiveDateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S").map(|ndt| DateTime::<Utc>::from_utc(ndt, Utc)) - Mingwei Samuel
@MingweiSamuel 我猜更新是因为“UTC”不再是Chrono的一部分了?但你的建议是否真的是解析具有已知时区的日期时间(不包含在字符串中)最简洁的方法?我有点惊讶,因为这似乎是一个相当常见的需求。 - Brendano257
应该是 Utc:https://docs.rs/chrono/0.4.19/chrono/offset/struct.Utc.html - Marco Seravalli

2
当信息不足以填满整个对象时,会出现ParseError(NotEnough)错误。例如,日期、时间或时区缺失。
在上面的示例中,时区缺失。因此,我们可以将其存储在NaiveDateTime中。该对象不存储时区。
let naive_datetime = NaiveDateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S").unwrap();

更多信息请参见:https://dev59.com/RVIH5IYBdhLWcg3wHJKn#61179071


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接