Expand description
§Jalali-rs
A simple crate for converting dates between the Gregorian and Jalali (Persian) calendars.
This crate provides functions for date conversions, including support for Unix timestamps and string formatting.
All functions assume valid inputs where possible, but return Option for cases with potential invalid data to avoid panics.
§Core Features
- Convert Gregorian to Jalali dates and vice versa.
- Convert Unix timestamps to Jalali dates and vice versa (assuming UTC midnight; negative timestamps return
None). - Parse and format date strings with custom separators, handling Persian/Arabic digits automatically.
- Convert between Latin, Persian, and Arabic digits for flexible user input.
§Usage
use jalali_rs::{gregorian_to_jalali, jalali_to_gregorian,unix_to_jalali,jalali_to_unix,persian_or_arabic_digits_to_latin,latin_digits_to_persian,parse_gregorian_string_to_jalali_string,parse_jalali_string_to_gregorian_string};
// Basic date conversion
let (jy, jm, jd) = gregorian_to_jalali(2025, 12, 27);
assert_eq!((jy, jm, jd), (1404, 10, 6));
let (gy, gm, gd) = jalali_to_gregorian(1404, 10, 6);
assert_eq!((gy, gm, gd), (2025, 12, 27));
// Unix timestamp conversion (0 -> 1970-01-01 Gregorian -> 1348-10-11 Jalali)
if let Some((jy, jm, jd)) = unix_to_jalali(0) {
println!("Jalali from Unix 0: {}-{}-{}", jy, jm, jd);
}
if let Some(timestamp) = jalali_to_unix(1348, 10, 11) {
println!("Unix from Jalali 1348-10-11: {}", timestamp);
}
// String parsing with separator (handles Persian/Arabic digits)
if let Some(jalali_str) = parse_gregorian_string_to_jalali_string("۲۰۲۵-۱۲-۲۷", '-') {
println!("Converted: {}", jalali_str); // Outputs: 1404-10-06
}
if let Some(gregorian_str) = parse_jalali_string_to_gregorian_string("۱۴۰۴-۱۰-۰۶", '-') {
println!("Converted: {}", gregorian_str); // Outputs: 2025-12-27
}
// Digit conversions
let persian = latin_digits_to_persian("2025-12-27");
println!("Persian digits: {}", persian); // ۲۰۲۵-۱۲-۲۷
let latin = persian_or_arabic_digits_to_latin("۱۴۰۴-۱۰-۰۶");
println!("Latin digits: {}", latin); // 1404-10-06Functions§
- gregorian_
to_ jalali - Converts a Gregorian date to a Jalali (Persian) date.
- jalali_
to_ gregorian - Converts a Jalali (Persian) date to a Gregorian date.
- jalali_
to_ unix - Converts a Jalali date to a Unix timestamp (seconds since 1970-01-01 UTC at midnight).
- latin_
digits_ to_ persian - Converts Latin digits in a string to Persian digits.
- parse_
gregorian_ string_ to_ jalali_ string - Parses a Gregorian date string (e.g., “2025-12-27”) and converts to Jalali string format.
- parse_
jalali_ string_ to_ gregorian_ string - Parses a Jalali date string (e.g., “1404-10-06”) and converts to Gregorian string format.
- persian_
or_ arabic_ digits_ to_ latin - Converts Persian or Arabic digits in a string to Latin digits.
- unix_
to_ jalali - Converts a Unix timestamp (seconds since 1970-01-01 UTC) to a Jalali date.