samanzamani / PersianDate

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

مشکل در سال 1402 #79

Closed mahramane closed 1 year ago

mahramane commented 1 year ago

سلام وقت بخیر من داشتم یک تاریخ برای سال 1402 تنظیم میکردم که به مشکل خوردم تاریخ میلادی 29-04-2023 به شمسی میشه 09-01-1402 و کتابخونه شما درست نشون میده. اما وقتی برای همین تاریخ میلادی ساعت 23:59:59:999 را تعیین میکنم، به شمسی روز بعد رو نشون میده یعنی برای تاریخ میلادی 23:59:59:999 29-04-2023 تاریخ 10-01-1402 شمسی رو نشون میده و یک روز جلوتر میبره. در ضمن این مشکل برای سال 1401 وجود نداشت بلکه در سال 1402 خودشو نشون داد. ممنون میشم بررسی و اصلاح کنید.

mahramane commented 1 year ago

یک نکته دیگه هم اینه که تا ساعت 23 درست کار میکنه وقتی ساعت رو روی 23 به بعد میزاری میره روز بعد.

samanzamani commented 1 year ago

سلام ممنون از گزارشتون بررسی می کنم

mahramane commented 1 year ago

سلام آقای زمانی این مشکل حل شد؟

samanzamani commented 1 year ago

سلام روز جمعه اپدیت جدید منتشر خواهم کرد.

samanzamani commented 1 year ago

سلام @mahramane موردی که گفتید رو من در نسخه ‍‍1.5.4 تست می کنم بدون مشکل تبدیل میشه و تاریخ 1402/02/09 23:59:59 برمی گردونه:

PersianDate pDate = new PersianDate().initGrgDate(2023,4,29,23,59,59);
Log.i("LOG",PersianDateFormat.format(pDate,"Y/m/d H:i:s")); //1402/02/09 23:59:59

لطفا کدتو برام بفرست تا بررسی کنم. در ضمن در نظر بگیر که به صورت پیشفرض کتابخانه از تایم زون پیشفرض دستگاه استفاده می کنه که می تونی برای تنظیم روی ایران از این کد استفاده کنی:

PersianDate pDate = new PersianDate().initGrgDate(2023,4,29,23,59,59);
pDate.setLocal(new Locale("fa","IR"));
mahramane commented 1 year ago

سلام تایم زون درست است و روی ایران قرار دارد. برای درک بهتر ساده تر توضیح میدم من یک تابع به شکل زیر نوشتم :

fun getSolarDateText(millis: Long): String {
    val pDate = PersianDate(millis)
    val format = PersianDateFormat("l j F Y")
    return format.format(pDate)
}

الان یک تاریخ به شکل میلی ثانیه دارم که هر دوی آنها یک روز است فقط یکی از آنها ساعت 23:59:59 است و یکی ساعت 09:57:48 سپس هر دوی آنها را به تابع بالا ارسال میکنم

1679812068000 => 2023-03-26 09:57:48.000000
1679862599999 => 2023-03-26 23:59:59.999000

میتوانید دو تاریخ بالا را در سایت https://currentmillis.com بررسی کنید و از درستی آنها اطمینان حاصل کنید.

getSolarDateText(1679812068000) //یک‌شنبه 6 فروردین 1402
getSolarDateText(1679862599999) //دوشنبه 7 فروردین 1402

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

samanzamani commented 1 year ago

سلام لطفا اول کتابخانه رو به آخرین ورژن بروزرسانی کن و بعد تست کن. من تاریخی که ذکر کردی تست کردم و نتیجه صحیح بر می گردونه:

    PersianDate pdate = new PersianDate(1679812068000L);
    PersianDate pdate2 = new PersianDate(1679862599999L);
    Log.d("LOG", "First Date to Jalali: " + PersianDateFormat.format(pdate,"Y/m/d H:i:s"));//1402/01/06 09:57:48
    Log.d("LOG", "Second Date to Jalali: " + PersianDateFormat.format(pdate2,"Y/m/d H:i:s"));//1402/01/06 23:59:59

در نظر داشته باش برای ساخت ‍شی PersianDate از ‍‍timestamp پارامتر ورودی حتما باید long باشه.

samanzamani commented 1 year ago

من با پارامتر j به جای d هم تست کردم و توی نمایش مشکلی نداشت.

   PersianDate pdate = new PersianDate(1679812068000L);
   PersianDate pdate2 = new PersianDate(1679862599999L);
   Log.d("LOG", "First Date to Jalali: " + PersianDateFormat.format(pdate,"Y/j/d H:i:s"));//1402/6/06 09:57:48
   Log.d("LOG", "Second Date to Jalali: " + PersianDateFormat.format(pdate2,"Y/j/d H:i:s"));//1402/6/06 23:59:59
mhrohani1385 commented 1 year ago

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

mahramane commented 1 year ago

Screenshot 2023-02-18 125141

خیلی عجیبه 😢 کتابخونه رو بروز کردم و دقیقا کد شمارو اجرا کردم. ممنون بابت پیگیریتون آقای زمانی. من بازم بررسی میکنم ببینم مشکل از چیه 😢

mahramane commented 1 year ago

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

samanzamani commented 1 year ago

بسیار عالی جهت اطمینان می تونید تایم زون رو هم ست کنید.