Datetime 使用Chrono时,BadFormat解析字符串到日期

Datetime 使用Chrono时,BadFormat解析字符串到日期,datetime,rust,Datetime,Rust,我正在尝试使用Chrono库将字符串转换为日期。我总是收到BadFormat或NotEnough错误: extern crate chrono; use chrono::prelude::*; fn main() { let dt1 = DateTime::parse_from_str( "2017-08-30 18:34:06.638997932 UTC", "%Y-%m-%d %H:%M:%S.%9f" ); println!("

我正在尝试使用Chrono库将字符串转换为日期。我总是收到
BadFormat
NotEnough
错误:

extern crate chrono;

use chrono::prelude::*;

fn main() {
    let dt1 = DateTime::parse_from_str(
        "2017-08-30 18:34:06.638997932 UTC", 
        "%Y-%m-%d %H:%M:%S.%9f"
    );
    println!("{:?}", dt1);
}
我不确定我做错了什么

  • 如注释中所述,格式字符串不允许字符串的
    “UTC”
    部分。这就是为什么会出现
    BadFormat
    错误

  • 如果将
    “UTC”
    添加到格式字符串中,仍然会出现
    BadFormat
    错误,因为您在应为
    %.9f
    时键入了
    %9f

  • 一旦你修复了它,你会得到一个
    NotEnough
    错误,因为我们实际上没有解析时区

  • 我会使用
    NaiveDateTime
    始终以UTC进行解析,然后将
    “UTC”
    添加到格式字符串中以忽略它,从而更正输入错误:

    use chrono::prelude::*; // 0.4.9
    
    fn main() {
        let dt1 = NaiveDateTime::parse_from_str(
            "2017-08-30 18:34:06.638997932 UTC",
            "%Y-%m-%d %H:%M:%S%.9f UTC",
        );
    
        println!("{:?}", dt1); // Ok(2017-08-30T18:34:06.638997932)
    }
    
  • 如注释中所述,格式字符串不允许字符串的
    “UTC”
    部分。这就是为什么会出现
    BadFormat
    错误

  • 如果将
    “UTC”
    添加到格式字符串中,仍然会出现
    BadFormat
    错误,因为您在应为
    %.9f
    时键入了
    %9f

  • 一旦你修复了它,你会得到一个
    NotEnough
    错误,因为我们实际上没有解析时区

  • 我会使用
    NaiveDateTime
    始终以UTC进行解析,然后将
    “UTC”
    添加到格式字符串中以忽略它,从而更正输入错误:

    use chrono::prelude::*; // 0.4.9
    
    fn main() {
        let dt1 = NaiveDateTime::parse_from_str(
            "2017-08-30 18:34:06.638997932 UTC",
            "%Y-%m-%d %H:%M:%S%.9f UTC",
        );
    
        println!("{:?}", dt1); // Ok(2017-08-30T18:34:06.638997932)
    }
    

    格式字符串缺少时区说明符格式字符串缺少时区说明符如何解析
    字符串而不是
    &'static str
    ?Chrono的所有示例始终使用
    和'static str
    。但在真正的程序中,你不是这样做的。在生产中,您对所有内容都使用
    String
    。@TheFox。TL;DR:如果您有一个
    s:String
    ,您可以传递
    &s
    ,它将成为
    &str
    ,我如何解析
    字符串而不是
    和静态str
    ?Chrono的所有示例始终使用
    和'static str
    。但在真正的程序中,你不是这样做的。在生产中,您对所有内容都使用
    String
    。@TheFox。TL;DR:如果您有一个
    s:String
    ,您可以传递
    &s
    ,它将成为
    &str