Skip to content

PicoJr/htp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.