gpt4 book ai didi

Rust Chrono 解析日期字符串、ParseError(NotEnough) 和 ParseError(TooShort)

转载 作者:行者123 更新时间:2023-12-03 11:24:09 30 4
gpt4 key购买 nike

如何将字符串转换为 chrono::DateTimechrono::NaiveDateTime

ParseError(NotEnough) 或 ParseError(TooShort) 是什么意思?

最佳答案

将 String 转换为 Chrono 对象时,您必须知道字符串的输入格式具有哪些部分。
零件是:日期、时间、时区
例子:

  • “2020-04-12” => 日期 = NaiveDate
  • "22:10"=> 时间 = NaiveTime
  • “2020-04-12 22:10:57” => 日期 + 时间 = NaiveDateTime
  • "2020-04-12 22:10:57+02:00"=> 日期 + 时间 + 时区 = DateTime<Tz>

  • 解析错误(NotEnough)当没有足够的信息来填写整个对象时显示。例如,缺少日期、时间或时区。
    当格式与字符串不匹配时,您会得到 解析错误(太短)解析错误(无效)错误。
    字符串格式的规范,例如 "%Y-%m-%d %H:%M:%S" : https://docs.rs/chrono/latest/chrono/format/strftime/index.html
    RFC2822 = 日期 + 时间 + 时区
    要转换 RFC2822 字符串,请使用 parse_from_rfc2822(..)功能。
    let date_str = "Tue, 1 Jul 2003 10:52:37 +0200";
    let datetime = DateTime::parse_from_rfc2822(date_str).unwrap();
    RFC3339 = 日期 + 时间 + 时区
    转换 RFC3339 or ISO 8601字符串使用 parse_from_rfc3339(..)功能。
    let date_str = "2020-04-12T22:10:57+02:00";
    // convert the string into DateTime<FixedOffset>
    let datetime = DateTime::parse_from_rfc3339(date_str).unwrap();
    // convert the string into DateTime<Utc> or other timezone
    let datetime_utc = datetime.with_timezone(&Utc);
    日期 + 时间 + 时区(其他或非标准)
    要转换其他日期时间字符串,请使用 parse_from_str(..)功能。
    let date_str = "2020-04-12 22:10:57 +02:00";
    let datetime = DateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S %z").unwrap();
    日期 + 时间
    当您没有时区时,您需要使用 NaiveDateTime .此对象不存储时区:
    let date_str = "2020-04-12 22:10:57";
    let naive_datetime = NaiveDateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S").unwrap();
    日期
    如果我们解析日期(没有时间),我们可以将它存储在 NaiveDate 中.此对象不存储时间或时区:
    let date_str = "2020-04-12";
    let naive_date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d").unwrap();
    时间
    如果我们解析时间(没有日期),我们可以将它存储在 NaiveTime 中.此对象不存储日期或时区:
    let time_str = "22:10:57";
    let naive_time = NaiveTime::parse_from_str(time_str, "%H:%M:%S").unwrap();
    添加日期、时间和/或时区
    如果我们有一些字符串并想要添加更多信息,我们可以更改类型。但是您必须自己提供这些信息。
    let date_str = "2020-04-12";
    // From string to a NaiveDate
    let naive_date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d").unwrap();
    // Add some default time to convert it into a NaiveDateTime
    let naive_datetime: NaiveDateTime = naive_date.and_hms(0,0,0);
    // Add a timezone to the object to convert it into a DateTime<UTC>
    let datetime_utc = DateTime::<Utc>::from_utc(naive_datetime, Utc);
    示例代码游乐场: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d2b83b3980a5f8fb2e798271766b4541

    关于Rust Chrono 解析日期字符串、ParseError(NotEnough) 和 ParseError(TooShort),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61179070/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com