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 month
last friday at 19
,monday at 6 am
7
,7am
,7pm
,7:30
,19:43:00
now
,yesterday
,today
,friday
2020-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.