| Crates.io | date_time_parser_slipushkina |
| lib.rs | date_time_parser_slipushkina |
| version | 0.1.0 |
| created_at | 2025-11-19 09:23:57.205169+00 |
| updated_at | 2025-11-19 09:23:57.205169+00 |
| description | A parser for dates in ISO (YYYY-MM-DD) and European (DD/MM/YYYY) formats and times in 24-hour and 12-hour formats |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1939718 |
| size | 18,099 |
=======
date_time_parser_Slipushkina — це парсер, який розпізнає дати і час у двох найпоширеніших форматах:
YYYY-MM-DDDD/MM/YYYYHH:MMHH:MM AM/PMПарсер приймає рядок з датою і визначає формат автоматично:
- → використовується правило DATE_ISO/ → використовується правило DATE_EURO: → використовується правило TIME_24AM або PM → використовується правило TIME_12Використано:
thiserror — для зручного опису помилок у бібліотеці (lib.rs)
anyhow — для обробки помилок у модульних тестах (tests/)
cargo fmt — для автоматичного форматування коду
cargo clippy — для перевірки якості коду перед комітом
cargo test — для перевірки правильності парсингу
Після розбору повертається структура:
DateSimple {
year: i32,
month: u32,
day: u32
}
TimeSimple {
hour: u32,
minute: u32
}
WHITESPACE = _{ " " | "\t" | "\n" }
DIGIT = _{ '0'..'9' }
Назви місяців і днів не використовуються, тому просто числа
YEAR = @{ DIGIT{4} } # YYYY
MONTH = @{ DIGIT{1,2} } # 1..12
DAY = @{ DIGIT{1,2} } # 1..31
HOUR_24 = @{ DIGIT{1,2} } # 0..23
HOUR_12 = @{ DIGIT{1,2} } # 1..12
MINUTE = @{ DIGIT{1,2} } # 0..59
Дата у форматі ISO: YYYY-MM-DD
DATE_ISO = { YEAR ~ "-" ~ MONTH ~ "-" ~ DAY }
Дата у європейському форматі: DD/MM/YYYY
DATE_EURO = { DAY ~ "/" ~ MONTH ~ "/" ~ YEAR }
Час у 24-годинному форматі: HH:MM
TIME_24 = { HOUR_24 ~ ":" ~ MINUTE }
Час у 12-годинному форматі: HH:MM AM/PM
TIME_12 = { HOUR_12 ~ ":" ~ MINUTE ~ WHITESPACE? ~ ("AM" | "PM") }
Загальний рядок для парсера: автоматично визначає формат
DATETIME_STRING = _{ DATE_ISO | DATE_EURO | TIME_24 | TIME_12 }