Crate jalali_rs

Crate jalali_rs 

Source
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-06

Functions§

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.