【问题标题】:BadFormat parsing string to date when using ChronoBadFormat 使用 Chrono 时将字符串解析为日期
【发布时间】:2018-02-08 14:38:28
【问题描述】:

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

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

我不确定我做错了什么。

【问题讨论】:

  • 格式字符串缺少时区说明符

标签: datetime rust


【解决方案1】:
  1. 如 cmets 中所述,您的格式字符串不允许使用字符串的 " UTC" 部分。这就是您收到BadFormat 错误的原因。

  2. 如果您将" UTC" 添加到格式字符串中,您仍然会收到BadFormat 错误,因为您在应该是%.9f 时输入了.%9f

  3. 修复该问题后,您会收到 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)
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
相关资源
最近更新 更多