ParsiDate: The Must Complete Persian (Jalali) Calendar for Rust
(Scroll down for Persian / برای توضیحات فارسی به پایین صفحه مراجعه کنید)
ParsiDate
A most complete Rust crate for handling Persian (also known as Jalali or Shamsi) calendar dates. It provides functionality for converting between Gregorian and Persian dates, validating dates, formatting them, and performing basic date calculations. It leverages the chrono crate for Gregorian date representation.
Features
- Gregorian to Persian Conversion: Convert
chrono::NaiveDatetoParsiDate. - Persian to Gregorian Conversion: Convert
ParsiDateback tochrono::NaiveDate. - Date Validation: Check if a year, month, day combination is a valid date in the Persian calendar (
is_valid). - Leap Year Calculation: Determine if a Persian year is a leap year (
is_persian_leap_year). - Date Formatting: Format
ParsiDateinto various string representations (format,to_string).short: "YYYY/MM/DD" (e.g., "1403/05/02")long: "D MMMM YYYY" (e.g., "2 مرداد 1403")iso: "YYYY-MM-DD" (e.g., "1403-05-02")
- Weekday Calculation: Get the Persian name of the weekday (
weekday). - Date Difference: Calculate the absolute number of days between two
ParsiDateinstances (days_between). - Error Handling: Uses a simple
DateErrorenum for invalid operations.
Installation
Add this to your Cargo.toml:
[]
= "1.2.0" # Replace with the latest version
= "0.4" # ParsiDate depends on chrono
Usage Example
use NaiveDate;
use ;
API Overview
ParsiDate { year, month, day }: Struct representing a Persian date.DateError::InvalidDate: Enum for errors during conversion or validation.ParsiDate::new(y, m, d): Creates a newParsiDate, validating the input.ParsiDate::from_gregorian(NaiveDate): Converts Gregorian to Persian.parsi_date.to_gregorian(): Converts Persian to Gregorian.parsi_date.is_valid(): Checks if the date is valid.ParsiDate::is_persian_leap_year(year): Checks if a Persian year is leap.ParsiDate::is_gregorian_leap_year(year): Checks if a Gregorian year is leap.parsi_date.format(style): Formats the date to a string.parsi_date.weekday(): Gets the Persian weekday name.parsi_date.days_between(&other): Calculates days between two dates.
Error Handling
Functions that can fail (like conversion or creation with invalid data) return Result<ParsiDate, DateError>. The only current error variant is DateError::InvalidDate.
Testing
Run tests using the standard Rust command:
Contributing
Contributions (bug reports, feature requests, pull requests) are welcome! Please feel free to open an issue or submit a PR.
License
This project is licensed under the MIT License.
فارسی (Persian)
ParsiDate: تقویم فارسی (جلالی) برای Rust
کاملترین کتابخانه برای زبان برنامهنویسی Rust جهت کار با تاریخهای تقویم فارسی (که به نامهای جلالی یا شمسی نیز شناخته میشود). این کتابخانه امکان تبدیل تاریخ بین تقویم میلادی و فارسی، اعتبارسنجی تاریخها، قالببندی آنها و انجام محاسبات پایهای تاریخ را فراهم میکند. این کتابخانه از کتابخانه chrono برای نمایش تاریخ میلادی استفاده میکند.
ویژگیها
- تبدیل میلادی به فارسی: تبدیل
chrono::NaiveDateبهParsiDate. - تبدیل فارسی به میلادی: تبدیل
ParsiDateبهchrono::NaiveDate. - اعتبارسنجی تاریخ: بررسی اینکه آیا ترکیب سال، ماه و روز یک تاریخ معتبر در تقویم فارسی است (
is_valid). - محاسبه سال کبیسه: تشخیص اینکه آیا یک سال فارسی کبیسه است (
is_persian_leap_year). - قالببندی تاریخ: قالببندی
ParsiDateبه رشتههای متنی مختلف (format,to_string).short: "YYYY/MM/DD" (مثال: "1403/05/02")long: "D MMMM YYYY" (مثال: "2 مرداد 1403")iso: "YYYY-MM-DD" (مثال: "1403-05-02")
- محاسبه روز هفته: دریافت نام فارسی روز هفته (
weekday). - اختلاف تاریخ: محاسبه تعداد روزهای مطلق بین دو نمونه
ParsiDate(days_between). - مدیریت خطا: استفاده از یک
enumبه نامDateErrorبرای عملیات نامعتبر.
نصب
این خطوط را به فایل Cargo.toml پروژه خود اضافه کنید:
[]
= "1.2.0" # با آخرین نسخه جایگزین کنید
= "0.4" # ParsiDate به chrono وابسته است
مثال استفاده
use NaiveDate;
use ;
مروری بر API
ParsiDate { year, month, day }: ساختاری (struct) برای نمایش تاریخ شمسی.DateError::InvalidDate: اینام (enum) برای خطاها هنگام تبدیل یا اعتبارسنجی.ParsiDate::new(y, m, d): یکParsiDateجدید ایجاد میکند و ورودی را اعتبارسنجی میکند.ParsiDate::from_gregorian(NaiveDate): تاریخ میلادی را به شمسی تبدیل میکند.parsi_date.to_gregorian(): تاریخ شمسی را به میلادی تبدیل میکند.parsi_date.is_valid(): بررسی میکند که آیا تاریخ معتبر است.ParsiDate::is_persian_leap_year(year): بررسی میکند که آیا سال کبیسه است.ParsiDate::is_gregorian_leap_year(year): بررسی میکند که آیا سال میلادی کبیسه است.parsi_date.format(style): تاریخ را به رشته قالببندی میکند.parsi_date.weekday(): نام فارسی روز هفته را برمیگرداند.parsi_date.days_between(&other): تعداد روزهای بین دو تاریخ را محاسبه میکند.
مدیریت خطا
توابعی که ممکن است با شکست مواجه شوند (مانند تبدیل یا ایجاد با داده نامعتبر) مقدار Result<ParsiDate, DateError> را برمیگردانند. تنها نوع خطای فعلی DateError::InvalidDate است.
تست
تستها را با استفاده از دستور استاندارد Rust اجرا کنید:
مشارکت در پروژه
از مشارکت شما (گزارش خطا، درخواست ویژگی جدید، پول ریکوئست) استقبال میشود! لطفاً یک issue باز کنید یا یک PR ارسال نمایید.
مجوز انتشار
این پروژه تحت مجوز MIT منتشر شده است.