MCPcopy Index your code
hub / github.com/bspeice/dtparse

github.com/bspeice/dtparse @v2.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.0.0 ↗ · + Follow
400 symbols 828 edges 10 files 7 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

dtparse

crates.io docs.rs

The fully-featured "even I couldn't understand that" time parser. Designed to take in strings and give back sensible dates and times.

dtparse has its foundations in the dateutil library for Python, which excels at taking "interesting" strings and trying to make sense of the dates and times they contain. A couple of quick examples from the test cases should give some context:

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

And we can even handle fuzzy strings where dates/times aren't the only content if we dig into the implementation a bit!

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

Further examples can be found in the examples directory on international usage.

Usage

dtparse requires a minimum Rust version of 1.28 to build, but is tested on Windows, OSX, BSD, Linux, and WASM. The build is also compiled against the iOS and Android SDK's, but is not tested against them.

Core symbols most depended-on inside this repo

len
called by 25
src/lib.rs
parse
called by 20
src/lib.rs
append
called by 17
src/lib.rs
parse_info
called by 9
src/lib.rs
hms_index
called by 7
src/lib.rs
ampm_index
called by 5
src/lib.rs
isword
called by 4
src/tokenize.rs
isnum
called by 4
src/tokenize.rs

Shape

Function 347
Method 43
Class 6
Enum 4

Languages

Rust96%
Python4%

Modules by API surface

src/tests/pycompat_parser.rs157 symbols
src/tests/pycompat_tokenizer.rs153 symbols
src/lib.rs46 symbols
build_pycompat.py14 symbols
src/tests/fuzzing.rs10 symbols
src/tokenize.rs9 symbols
src/weekday.rs7 symbols
build_pycompat_tokenizer.py2 symbols
src/tests/mod.rs1 symbols
examples/russian.rs1 symbols

For agents

$ claude mcp add dtparse \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact