6 releases
0.2.1 | Sep 9, 2024 |
---|---|
0.2.0 | Jun 5, 2024 |
0.1.3 | Feb 18, 2024 |
0.1.0 | Jan 22, 2024 |
#157 in Date and time
49 downloads per month
38KB
1K
SLoC
Langtime - Parsing dates in rust
This library is a personal project that allows rust programmers to parse dates written in the english language, both absolute and relative. These are some examples of dates that you can currently parse:
2024-01-01 at 20:15
28/02/2024 at 10 a.m.
25 minutes ago
Why creating this repo when chrono-english already exists? Well for two reasons. First of all, I didn't knew it existed. Second, there are some formats, or combination thereof, that are not parsable with chrono_english.
This library uses nom, which makes it extremely easy to add new formats to the parsable inputs.
How to use it
The most basic use of this library looks like this:
fn main() {
match langtime::parse("12/05/2024 at 8pm") {
Ok(datetime) => println!("{:?}", datetime),
Err(_) => println!("Cannot parse input as a date")
};
}
By default, the parse function will discard any input that is found beyond the datetime string. For example, this code would also correctly match a string such as "12/05/2024 is the date", even though "is the date" is not recognized as a time or date format.
There are some options that you can pass through a configuration struct. The first one is the english dialect (US or UK). This is currently only used to discern whether the date format for the language is "dd/mm/yyyy" or "mm/dd/yyyy". Then, you can also force the library to check that the full string is parsable as a date, so that the text "12/05/2024 is the date" will not be considered correct anymore, and will result in an error.
Here is how you can do it:
use langtime::{parse_with_config, ParseConfig, Dialect};
fn main() {
let config = ParseConfig {
dialect: Dialect::US,
full_string_match: true
};
match parse_with_config("05/23/2024 at 9pm", &config) {
Ok(datetime) => println!("{:?}", datetime),
Err(_) => println!("Cannot parse input as a date")
}
}
Next goals
- Expand allowed tokens to separate parts of sentences
- Correct month and year calculation
- Implement unit tests
- Add missing time format
- Cleanup text before parsing
- Add configuration for english dialects (UK/US)
- Add configuration to force matching to the full string
Parsable data
Dates
- 2024-01-20 (ISO)
- 20/01/2024
- yesterday / tomorrow
- 01/2024 (beginning of the month)
- january 2024 (same as above)
- 1st jan 2024
Times
- 17:00
- 17:00:30
- 5 p.m. / 5pm
- 8 o'clock / half past 9 / a quarter to 10
Relative times and dates
- in 5 hours
- 8 minutes ago
- 2 hours, 8 minutes and 10 seconds ago
- last friday
- next tuesday
- saturday / this saturday
- 2 days ago
- in 3 months
Full dates and times
- 2024-01-01T20:30:10
- yesterday at 17:00
- tomorrow at 8 p.m.
- 2 days ago at 5 a.m.
- last friday at 9:00
Dependencies
~2MB
~37K SLoC