Что означает ParseError(NotEnough) от rust-chrono?

Я использую 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)

Что это значит? Не хватает чего? Должен ли я использовать какую-то другую библиотеку?

2 ответа

Решение

Вы должны использовать

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)
    }

}

Типы, которые реализуют Error иметь более удобные сообщения об ошибках через Error::description или же Display:

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

Это печатает:

ввода недостаточно для уникальной даты и времени

Предположительно, это потому, что вы не указали часовой пояс, поэтому время неоднозначно.

Ошибка ParseError(NotEnough) появляется, когда недостаточно информации для заполнения всего объекта. Например, отсутствует дата, время или часовой пояс.

В приведенном выше примере отсутствует часовой пояс. Таким образом, мы можем сохранить его в NaiveDateTime. Этот объект не хранит часовой пояс:

let naive_datetime = NaiveDateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S").unwrap();

Для получения дополнительной информации: /questions/50545499/string-datyi-sintaksicheskogo-analiza-rust-chrono-parseerror-notenough-i-parseer/50545504#50545504

Другие вопросы по тегам