samanzamani / PersianDate

Persian date for android
BSD 3-Clause "New" or "Revised" License
326 stars 40 forks source link

previous month calculation has bug #67

Closed mehdi-amirafshar closed 2 years ago

mehdi-amirafshar commented 2 years ago

Hi, below code has a bug in calculation of previous month in Persian

public PersianDate subMonth(){ return this.subMonths(1); }

when we do subMonth() for this date => ( 2022-04-21 )

samanzamani commented 2 years ago

hi @mehdi-amirafshar Thank you for your report. I will check this method

samanzamani commented 2 years ago

سلام @mehdi-amirafshar با تشکر از گزارشی که دادید با توجه به نیاز به توضیحات در مورد این مسئله من پاسخ به فارسی می نویسم. وقتی شما از توابع init برای ساخت یک تاریخ استفاده می کنید مثل کد زیر در واقع ساعت و دقیقه و ثانیه صفر خواهد بود که ساعت شروع روز را 00:00:00 در نظر می گیرد.

PersianDate pDate = new PersianDate();
pDate.initGrgDate(2022,4,21);

که تاریخ ۱ اردیبهشت ۱۴۰۱ خواهد بود. وقتی متد subMonth روی این تاریخ اعمال می‌شود باید در نظر بگیرید که ساعت رسمی کشور در فروردین یک ساعت جا به جا می‌شود ولی شما با ساعت 00:00:00 تاریخ را ساخته‌اید پس در واقع با توجه به یک ساعت جابه‌جایی ساعت شما به روز قبل ساعت 23:00:00 منتقل خواهید شد. پس در واقع شما می‌توانید با تنظیم ساعت زمانی که تاریخ را می‌سازید از این مسئله جلوگیری کنید.

PersianDate pDate = new PersianDate();
pDate.initGrgDate(2022,4,21,1,0,0);
Log.i("PersianDate", pDate.toString());//پنج‌شنبه 1 اردیبهشت
pDate.subMonth();
Log.i("PersianDate", pDate.toString());//دوشنبه 1 فروردین

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