ویرگول
ورودثبت نام
سعود پرکوک
سعود پرکوک
خواندن ۲ دقیقه·۴ سال پیش

مشکل سال های کبیسه در جاوا

سلام

با اومدن سال جدید تاریخ های بعضی برنامه ها و دستگاه ها به هم ریخته و سوژه بسیاری از کانال ها شده .

تقریبا چند سال پیش بود ، روی یه سفارش اندرویدی کار میکردم که توش از تقویم فارسی استفاده باید میکردم .

بنا به عادت پیگیر لایبراری هایی برای این کار شدم , تو همون سرچ اول چندتا لایبراری با دیزاین های قشنگ پیدا کردم و تصمیم بر استفادشون گرفتم .

در نگاه اول همه چیز اوکی بود تا اینکه توی بعضی دیوایس ها به مشکل دیزاین برخوردم و بعضی جاها ui تقویم به هم میریخت با عوض کردن چند تا لایبراری و بررسیشون فهمیدم هر کدوم مشکلاتی دارن یکی ui رو بهم میریزه یکی دیزاینش شیک نیست و نمیشه شخصی سازی کرد به راحتی و..... این مسائل رو سخت نگرفتم تا اینکه به یه مشکل اساسی خوردم . "سال های کبیسه" متوجه شدم چندتا تقویمی که استفاده کردم تو چندتا سال خاص مشکل کبیسه گیری دارن .

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

وقتی این کار رو کردم دیدم ای دل غافل همچیز در هم شد و سال ها بسی قاطی گشت (کبیسه های من با تقویم واقعی اصلا جور نبود :(

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

تبدیل ها رو خوب انجام میداد ولی باز با بعضی سال ها مشکل داشت مثلا 1342 ,1375 , 1403و ...... نمیتونست کبیسه رو درست تشخیص بده :


یکم تحقیق کردم که توی ویکی پدیا به جواب رسیدم

سال کبیسه - ویکی‌پدیا، دانشنامهٔ آزاد (wikipedia.org)

گاه‌شماری رسمی ایران - ویکی‌پدیا، دانشنامهٔ آزاد(wikipedia.org)

برخلاف تصور من کبیسه هر چهارسال یبار نیست و توی دوره هایی کبیسه پنج ساله داریم و بر خلاف تقویم میلادی کبیسه های ما دوره چندان منظمی در نگاه اول نداشت ; تو تقویم میلادی بعد از 20 سال کبیسه 4 ساله یه کبیسه 5 ساله پیش میاد ولی در تقویم شمسی این دوره ها متفاوتن 37 , 33 ,29 ساله که تکرار هر کدوم متفاوته .

نشستم به زیر و بالا کردن سال های استثنایی که توی اون مقاله ویکی پدیا و سال های استثنایی که خودم بدست اوردم رو تو یه کد اوردم و اون کلاس رو ارتقا دادم تا بتونم استفاده کنم (منبع چک من time.ir بود باحساب هم مشکلاتی داشت ) .

بهش یه ساختار برای نمایش در انتخابگر تاریخ (date packer) دادم تا تاریخ 1600 و بعد از اون تو برنامه هام چه ویندوزی و چه اندرویدی ازش استفاده میکنم .

راستی دوستان این مشکل من در زبان java بود.

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

saudparkook/PersianDataPicker (github.com)




تقویم شمسی اندرویدتقویم شمسی جاواکبیسه گیری در اندرویدandroid java date shamsisaud parkook سعود پرکوک
توسعه دهنده اندروید
شاید از این پست‌ها خوشتان بیاید