کار با تاریخ در اندروید (معرفی لایبری)


سلام. تو این پست میخوام یه library بهتون معرفی کنم که کار با تاریخ تو اندروید رو خیلی راحت میکنه.

همون طور که میدونید جاوا و اندروید تاریخ شمسی و قمری رو پشتیبانی نمیکنن و برای استفاده از اونا تو برنامتون باید از لایبری ها استفاده کنید.

منم برای برنامم به سیستم تاریخ شمسی و قمری و میلادی و البته date picker برای هر کدوم از این سیستم ها نیاز داشتم. و خوب مثل هر برنامه نویس دیگه رفتم تو github که یه لایبری پیدا کنم که این کارا رو برام انجام بده ولی پیدا نکردم. ینی برای این کار باید چند تا لایبری اضافه میکردم به پروژم که هر کدوم هم داستانای خودشون رو داشتن (مدل کد نوشتن هر کدوم با بقیه فرق میکرد) و از همه مهم تر ظاهر date picker هاشون با هم فرق داشت و همه ی زبان ها رو هم ساپورت نمیکردن (مثلا یه date picker میلادی زبان فارسی نداشت و یه date picker شمسی زبون انگلیسی نداشت).

خلاصه سرتون رو درد نیارم تصمیم گرفتم یه لایبری بنویسم :)


معرفی لایبری

این لایبری اسمش هست AndroidMultiCalendarTools که اینجا میتونید پیداش کنید این لایبری از سه سیستم تاریخ میلادی و شمسی و قمری پشتیبانی میکنه و حاوی date picker بسیار زیبا (تعریف از خود نباشه) هست که این date picker دو زبان فارسی و انگلیسی رو هم ساپورت میکنه و اضافه کردن یه زبون دیگه بهش هم بسیار کار ساده ایه و از استاندارد unix time هم پشنیبانی میکنه. که در ادامه نحوه ی استفاده ازش رو قدم به قدم بهتون توضیح میدم:


اضافه کردن به پروژه

۱. توی این صفحه میتونید لینک دانلود فایل .jar رو پیدا کنید.

۲. حالا اون فایلی که دانلود کردید رو فولدر /libs مسیر ماژولی که قراره توش از این لایبری استفاده کنید کپی کنید مثلا:

1YOUR_PROJECT_NAME/app/libs

۳. گردل رو sync کنید.


استفاده از سیستم تاریخ:

تبدیل تاریخ:

تبدیل به شمسی:

DateModel jalali = DateConverter.HijriToJalali(1440, 1, 1);
DateModel jalali = DateConverter.GregorianToJalali(2018, 1, 1);

تبدیل به میلادی:

DateModel gregorian = DateConverter.HijriToGregorian(1440, 1, 1);
DateModel gregorian = DateConverter.JalaliToGregorian(1397, 1, 1);

تبدیل به قمری:

DateModel hijri = DateConverter.GregorianToHijri(2018, 1, 1);
DateModel hijri = DateConverter.JalaliToHijri(1397, 1, 1);


گرفتن تاریخ فعلی:

JalaliDateTime jalaliDateTime = JalaliDateTime.Now(); //شمسی
GregorianDateTime gregorianDateTime = GregorianDateTime.Now(); // میلادی
HijriDateTime hijriDateTime = HijriDateTime.Now(); // قمری

امکانات دیگه هم داره که همش رو نمیشه اینجا توضیح داد ولی میتونید اینجا بخونید.


استفاده از date picker :

ابتدا داخل فایل xml تون اینو میزارید: (دقت کنید که سایزش رو تغییر ندید)

<com.ali.uneversaldatetools.datePicker.UDatePicker
        android:id="@+id/date_picker"
        android:layout_width="300dp"
        android:layout_height="350dp"/>

بعد تو بخش جاوا تون چیزی شبیه به این مینویسید:

UDatePicker uDatePicker = findViewById(R.id.date_picker);

//پارامتر ورودی تاریخی که دوست دارید که انجا را نشان دهد
uDatePicker.ShowDatePicker(dateSystem);

//در صورتی که میخواهید تاریخ امروز را نشان دهد
uDatePicker.ShowDatePicker(Calendar.Jalali);

//این کال بک موقعی که کاربر تاریخ رو انتخاب میکند صدا زده میشود
uDatePicker.setOnDateSelected((dateSystem, unixTime) -> {
    //اینجا میتونید ببینید کاربر چه تاریخی رو انتخاب کرده
});

//اخرین تاریخی که کاربر روش کلیک کرده(الان به صورت انتخاب شده در اومده) 
uDatePicker.getSelectedUnixTime();//as a unix time
uDatePicker.getSelectedDate();//as a DateSystem object

نتیجه ی کد بالا:

نکته ی جالب اینجاست که زبان و رنگ date picker هم از برنامه ی شما ارث میبره.


جمع بندی:

سعی کنید لایبری بنویسید و مثل من اوپن سورس بزارید گیت هاب :)

بعضی موقع ها میشه با لایبری های ساده کار بقیه رو تا چند ماه جلو انداخت پس چرا باید کد های شما تو هارد سیستموتون خاک بخوره؟

اگرم ایرادی باگی چیزی پیدا کردید یا پیشنهادی داشتید اینجا گزارش کنید (اگرم خودتون تونستید برطرفش کنید با یه pull request خوشحالم کنید).