2 releases

new 0.1.1 Mar 27, 2025
0.1.0 Mar 27, 2025

#160 in Date and time

MIT license

13KB
172 lines

Parsidate is a Rust library for converting between Gregorian and Persian (Jalali) dates. It provides utilities for date conversion, validation, formatting, and calculating differences between dates.

Features

  • Convert Gregorian dates to Persian (Jalali) dates and vice versa.
  • Validate Persian dates.
  • Format Persian dates in different styles (short, long, ISO).
  • Calculate the number of days between two Persian dates.
  • Get the weekday name in Persian.

Installation

Add the following to your Cargo.toml:

[dependencies]
parsidate = "0.1.0"

Usage

Here are some examples of how to use the library:

Convert Gregorian to Persian

use chrono::NaiveDate;
use parsidate::ParsiDate;

let gregorian = NaiveDate::from_ymd_opt(2025, 3, 27).unwrap();
let persian = ParsiDate::from_gregorian(gregorian).unwrap();
assert_eq!(persian.to_string(), "1404/01/07");

Convert Persian to Gregorian

use chrono::NaiveDate;
use parsidate::ParsiDate;

let persian = ParsiDate { year: 1404, month: 1, day: 7 };
let gregorian = persian.to_gregorian().unwrap();
assert_eq!(gregorian, NaiveDate::from_ymd_opt(2025, 3, 27).unwrap());

Validate Persian Dates

use parsidate::ParsiDate;

let valid_date = ParsiDate { year: 1404, month: 1, day: 7 };
assert!(valid_date.is_valid());

let invalid_date = ParsiDate { year: 1404, month: 1, day: 32 };
assert!(!invalid_date.is_valid());

Format Persian Dates

use parsidate::ParsiDate;

let date = ParsiDate { year: 1404, month: 1, day: 7 };
assert_eq!(date.format("short"), "1404/01/07");
assert_eq!(date.format("long"), "7 Farvardin 1404");
assert_eq!(date.format("iso"), "1404-01-07");

Calculate Days Between Two Dates

use parsidate::ParsiDate;

let date1 = ParsiDate { year: 1404, month: 1, day: 7 };
let date2 = ParsiDate { year: 1404, month: 1, day: 10 };
assert_eq!(date1.days_between(&date2), 3);

Get Weekday Name

use parsidate::ParsiDate;

let date = ParsiDate { year: 1404, month: 1, day: 7 };
assert_eq!(date.weekday(), "Panjshanbe");

License

This project is licensed under the MIT License. See the LICENSE file for details.

Author

Developed by Sina Jalalvandi. For inquiries, contact: Jalalvandi.Sina@gmail.com.

Dependencies

~1MB
~18K SLoC