Crates.io | langtime |
lib.rs | langtime |
version | 0.2.1 |
source | src |
created_at | 2024-01-22 08:06:42.307885 |
updated_at | 2024-09-09 03:55:29.833376 |
description | A rust library to parse english dates |
homepage | |
repository | https://github.com/andreadev-it/langtime |
max_upload_size | |
id | 1108434 |
size | 50,264 |
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.
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")
}
}