Work in progress Human Time Parser
This lib uses pest for parsing.
use chrono::{Utc, TimeZone};
use htp::parse;
let now = Utc.datetime_from_str("2020-12-24T23:45:00", "%Y-%m-%dT%H:%M:%S").unwrap();
let expected = Utc.datetime_from_str("2020-12-18T19:43:00", "%Y-%m-%dT%H:%M:%S").unwrap();
let datetime = parse("last friday at 19:43", now).unwrap();
assert_eq!(datetime, expected);Tweak how time is parsed and interpreted inside my rust time tracking tool.
It's fun to write parsers once in while, pest is really nice.
some examples:
4 min ago,4 h ago,1 week ago,in 2 hours,in 1 monthlast friday at 19,monday at 6 am7,7am,7pm,7:30,19:43:00now,yesterday,today,friday2020-12-25T19:43:00
It also supports interestingly-spaced inputs such as:
4 min ago
It is possible to try HTP out using cargo run --example time_parser:
example
cargo run --example time_parser last friday at 6
output
2020-07-03T06:00:00+02:00
Thanks to pest it also provides meaningful errors:
example
cargo run --example time_parser last friday at
output
--> 1:15
|
1 | last friday at
| ^---
|
= expected hms
Please see the CHANGELOG for a release history.