تقویم شمسی بهعنوان یک استاندارد رسمی در ایران و برخی کشورهای دیگر، جایگاه ویژهای در کاربردهای روزمره و حرفهای دارد. با این حال، در اکوسیستم Rust، ابزارهای محدودی برای پشتیبانی از این تقویم وجود داشت. کتابخانههای موجود یا به زبانهای دیگری توسعه یافته بودند که با نیازهای بهینهسازی Rust همخوانی نداشتند، یا فاقد بهروزرسانی و پشتیبانی کافی بودند به همین دلیل تصمیم گرفتم برای رفع نیاز خودم و سایر برنامه نویسان این پکیج رو بنویسم و منتشر کنم
قابلیتها
تبدیل دوطرفه تاریخ: امکان تبدیل تاریخ میلادی به شمسی و از شمسی به میلادی.
تشخیص سال کبیسه: تابع is_persian_leap_year برای شناسایی سالهای کبیسه شمسی.
محاسبه روز هفته: تابع weekday که نام روز هفته را به زبان فارسی بازمیگرداند.
سبکی و کارایی: طراحی شده با حداقل وابستگیها و بهرهمندی از کتابخانه chrono.
منبعباز بودن: کد منبع در دسترس عموم قرار دارد و امکان مشارکت در توسعه آن فراهم است.
نحوه عملکرد
Parsidate از کتابخانه استاندارد chrono برای مدیریت تاریخهای میلادی استفاده میکند و با پیادهسازی الگوریتمهای معتبر تبدیل تقویم، تاریخها را بهصورت دقیق به شمسی تبدیل مینماید. نمونهای از استفاده از این کتابخانه به شرح زیر است:
use chrono::NaiveDate;
use parsidate::ParsiDate;
fn main() {
// تبدیل تاریخ میلادی به شمسی
let gregorian_date = NaiveDate::from_ymd_opt(2025, 3, 28).unwrap();
let persian_date = ParsiDate::from_gregorian(gregorian_date).unwrap();
println!("تاریخ شمسی: {}", persian_date.to_string()); // خروجی: 1404/01/08
println!("روز هفته: {}", persian_date.weekday()); // خروجی: جمعه
// تبدیل تاریخ شمسی به میلادی
let persian_date = ParsiDate { year: 1404, month: 1, day: 8 };
let gregorian_date = persian_date.to_gregorian().unwrap();
println!("تاریخ میلادی: {}", gregorian_date); // خروجی: 2025-03-28
}
مشخصات فنی
وابستگیها: تنها وابستگی این کتابخانه، chrono است که برای مدیریت تاریخهای میلادی به کار میرود.
الگوریتم تبدیل: مبتنی بر فرمولهای استاندارد تبدیل تقویم میلادی به شمسی، با پشتیبانی از محاسبات سالهای کبیسه.
رابط برنامهنویسی (API): توابعی نظیر from_gregorian و to_gregorian با استفاده از نوع بازگشتی Result، مدیریت خطاها را بهصورت ایمن تضمین میکنند.
نحوه نصب و استفاده
برای افزودن Parsidate به پروژه خود، کافی است خط زیر را به فایل Cargo.toml اضافه کنید:
[dependencies]
parsidate = "0.1.1" # نسخه جاری یا آخرین نسخه
chrono = "0.4"
مثال و جزییات بیشتر را در crates.io قرار داده ام.
دیدگاههای پیشنهاد شده
دیدگاه خود را ارسال کنید
از استفاده از کلمات رکیک و خلاف قوانین و غیر مرتبط با موضوع خودداری کنید ...
توجه: strong> مطلب ارسالی شما پس از تایید مدیریت برای همه قابل رویت خواهد بود.