15 个版本 (稳定)

使用旧版 Rust 2015

新版本 2.0.1 2024 年 8 月 18 日
2.0.0 2023 年 8 月 24 日
1.5.0 2023 年 6 月 9 日
1.4.0 2023 年 3 月 25 日
0.9.1 2018 年 7 月 20 日

日期和时间 分类中排名 23

Download history 3401/week @ 2024-05-03 3263/week @ 2024-05-10 3210/week @ 2024-05-17 3345/week @ 2024-05-24 3881/week @ 2024-05-31 3190/week @ 2024-06-07 3275/week @ 2024-06-14 3250/week @ 2024-06-21 2925/week @ 2024-06-28 3053/week @ 2024-07-05 2925/week @ 2024-07-12 3337/week @ 2024-07-19 3574/week @ 2024-07-26 3132/week @ 2024-08-02 3158/week @ 2024-08-09 3576/week @ 2024-08-16

每月下载量 14,150
20 个包中使用(其中 6 个直接使用)

Apache-2.0 许可证

150KB
4K SLoC

dtparse

crates.io docs.rs

功能齐全的“即使我都不懂”的时间解析器。设计用于接收字符串并返回合理的日期和时间。

dtparse 的基础是 dateutil 库,该库擅长处理“有趣”的字符串,并尝试理解其中包含的日期和时间。以下是一些测试用例中的快速示例,以提供一些上下文

extern crate chrono;
extern crate dtparse;
use chrono::prelude::*;
use dtparse::parse;

assert_eq!(
    parse("2008.12.30"),
    Ok((NaiveDate::from_ymd(2008, 12, 30).and_hms(0, 0, 0), None))
);

// It can even handle timezones!
assert_eq!(
    parse("January 4, 2024; 18:30:04 +02:00"),
    Ok((
        NaiveDate::from_ymd(2024, 1, 4).and_hms(18, 30, 4),
        Some(FixedOffset::east(7200))
    ))
);

如果我们稍微深入了解实现,我们甚至可以处理模糊字符串,其中日期和时间不是唯一的内容!

extern crate chrono;
extern crate dtparse;
use chrono::prelude::*;
use dtparse::Parser;
use std::collections::HashMap;

let mut p = Parser::default();
assert_eq!(
    p.parse(
        "I first released this library on the 17th of June, 2018.",
        None, None,
        true /* turns on fuzzy mode */,
        true /* gives us the tokens that weren't recognized */,
        None, false, &HashMap::new()
    ),
    Ok((
        NaiveDate::from_ymd(2018, 6, 17).and_hms(0, 0, 0),
        None,
        Some(vec!["I first released this library on the ",
                  " of ", ", "].iter().map(|&s| s.into()).collect())
    ))
);

更多示例可以在 示例 目录中找到。

用法

dtparse 需要 Rust 版本 1.28 或更高版本才能构建,但已在 Windows、OSX、BSD、Linux 和 WASM 上进行测试。构建还针对 iOS 和 Android SDK 进行了编译,但未对其进行测试。

依赖项

~1.5–7MB
~35K SLoC