Go to file
Bradlee Speice 48705339e6 Add one final CONTRIBUTOR 2018-08-03 23:43:24 -04:00
ci Don't attempt running a lib crate 2018-08-03 22:10:50 -04:00
examples Add a custom parsing example in Russian 2018-08-03 23:40:54 -04:00
src Add a custom parsing example in Russian 2018-08-03 23:40:54 -04:00
.gitignore Don't track pyc 2018-07-02 22:23:55 -04:00
.travis.yml Get some new CI set up 2018-08-03 21:48:09 -04:00
CONTRIBUTING.md Remove fuzzing, add CONTRIBUTING/CONTRIBUTORS 2018-07-24 22:41:56 -04:00
CONTRIBUTORS.md Add one final CONTRIBUTOR 2018-08-03 23:43:24 -04:00
Cargo.toml Release version 1.0! 2018-08-03 23:42:09 -04:00
LICENSE Licensing/docs updates 2018-06-17 23:31:25 -04:00
README.md Add a custom parsing example in Russian 2018-08-03 23:40:54 -04:00
appveyor.yml Get some new CI set up 2018-08-03 21:48:09 -04:00
build_pycompat.py Add notes on codegen, and regenerate 2018-08-03 21:56:32 -04:00
build_pycompat_tokenizer.py Add notes on codegen, and regenerate 2018-08-03 21:56:32 -04:00

README.md

dtparse

travisci appveyor 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.