【问题标题】:What does ParseError(NotEnough) from rust-chrono mean?rust-chrono 中的 ParseError(NotEnough) 是什么意思?
【发布时间】:2016-09-21 22:56:14
【问题描述】:

我正在使用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)

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

【问题讨论】:

    标签: rust rust-chrono


    【解决方案1】:

    实现Error 的类型通过Error::descriptionDisplay 有更多用户友好的错误消息:

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

    打印出来:

    输入对于唯一的日期和时间是不够的

    大概是因为你没有提供时区,所以时间不明确。

    【讨论】:

      【解决方案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)
          }
      
      }
      

      【讨论】:

      • 更新:NaiveDateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S").map(|ndt| DateTime::<Utc>::from_utc(ndt, Utc))
      • @MingweiSamuel 我猜更新是因为“UTC”不再是 Chrono 的一部分?但是,您的建议真的是解析具有已知时区(不包含在字符串中)的日期时间的最简洁方法吗?我只是有点惊讶,因为这似乎是一个相当普遍的需求。
      【解决方案3】:

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

      在上面的示例中,时区缺失。所以我们可以将它存储在NaiveDateTime 中。此对象不存储时区:

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

      欲了解更多信息:https://stackoverflow.com/a/61179071/2037998

      【讨论】:

        猜你喜欢
        • 2018-06-16
        • 2020-07-25
        • 1970-01-01
        • 2022-10-02
        • 2022-07-22
        • 2020-06-20
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        相关资源
        最近更新 更多