htp

Crates.iohtp
lib.rshtp
version0.4.2
sourcesrc
created_at2020-07-04 20:35:48.682047
updated_at2021-11-08 16:52:45.451917
descriptionhuman time parser
homepage
repositoryhttps://github.com/PicoJr/htp
max_upload_size
id261425
size51,328
(PicoJr)

documentation

README

htp crate tbl documentation GitHub license

HTP

Work in progress Human Time Parser

This lib uses pest for parsing.

Example

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

Similar Crate

Why?

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.

What date format can it parse?

see time_clue grammar rule.

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

Changelog

Please see the CHANGELOG for a release history.

Commit count: 26

cargo fmt