آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

درخواست راهنمایی برای رفع باگ روزشمار

میلاد محمدی  6 سال پیش  6 سال پیش
0 0

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

کد:

 
long difference = futureDate.getTime() - currentDate.getTime();

long months = difference / (30 * 24 * 60 * 60 * 1000);
difference -= months * (30 * 24 * 60 * 60 * 1000);

long days = difference / (24 * 60 * 60 * 1000);
difference -= days * (24 * 60 * 60 * 1000);

long hours = difference / (60 * 60 * 1000);
difference -= hours * (60 * 60 * 1000);

long minutes = difference / (60 * 1000);
difference -= minutes * (60 * 1000);

long seconds = difference / 1000;

txt_month.setText("" + String.format("%02d", months));
txt_day.setText("" + String.format("%02d", days));
txt_hour.setText("" + String.format("%02d", hours));
txt_min.setText("" + String.format("%02d", minutes));
txt_scd.setText("" + String.format("%02d", seconds));


 ممنون میشم راهنمایی کنید

0 0
مقدار difference رو چطوری دارید محاسبه میکنید ؟ (6 سال پیش)
0 0
به این صورت: Code ("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HHss"); Date futureDate = dateFormat.parse(examTime); Date currentDate = new Date(); Code (6 سال پیش)
0 0
examTime تاریخ آینده هست که از بیرون وارد میشه. (6 سال پیش)
0 0
اوکی. فقط برای نشون دادن عبارت کد بصورت کد در نظر دادن از کیبورد خودتون رو انگلیسی کنید و ابتدای کد خودتون یک ` ( این علامت زیر escape توی کیبور گوشه ی سمت چپ قرار داره ) و در آخر کد هم یکی از همون بزارید. یادتون نره کیبورد رو تغییر بدید تا بتونید اون حرف رو تایپ کنید (6 سال پیش)
0 0
کد شما داره برام اشتباهی و درهم ریخته کپی میشه ، میتونید بصورت کامل در پست زیر قرار بدید ؟ (6 سال پیش)
0 0
حتما. من اولین تاپیکم بود اطلاع نداشتم. ممنون ازتون ‍‍`("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HHss"); Date futureDate = dateFormat.parse(examTime); Date currentDate = new Date();` (6 سال پیش)
0 0
من اون علامت‌هارو گذاشتم اما عمل نکرد! (6 سال پیش)
0 0
برادرم میلاد. همه رو کد پست زیر قرار بدید که امکان ویرایش داشته باشید ، یا میتونید همین پست رو ویرایش کنید ( در قسمت نظرات جای کد نیست) همچنین اینو توضیح بدید که yyyy-MM-dd HHss این چی هست ؟ خودمون بصورت دستی توش وارد میکنید ؟ (6 سال پیش)
0 0
اره بعضا عمل نمیکنه ، شاید بخاطر فاصله داشتن یا نداشتن بوده ، مهم نیست (6 سال پیش)
 برای این سوال 3 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
میلاد محمدی  6 سال پیش
0 0

اون عبارتی که گفتید فرمت تاریخ هست که باید تعیین کنم:

 ("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date futureDate = dateFormat.parse(examTime);
Date currentDate = new Date();
0 0
("SimpleDateFormat") این نباید کارایی داشته باشه ، درسته ؟ (6 سال پیش)
0 0
طبق چیزی که داخل سایت جاوا گفته بود اینطور وارد کردم. قاعدتا کارایی داره (6 سال پیش)
0 0
همینجا کدهایی که مربوط به هم هستند رو قرار بدید تا بتونم بخونم و کمکتون کنم (6 سال پیش)
0 0
الان کد کامل تابع رو قرار میدم (6 سال پیش)
0 0
اوکی ، فقط examTime رو هم تعیین کنید. (6 سال پیش)
پاسخ به سوال 
میلاد محمدی  6 سال پیش
0 0

 
public void countDownStart(final String examTime) {
handler = new Handler();
runnable = new Runnable() {
@SuppressLint("DefaultLocale")
@Override
public void run() {
handler.postDelayed(this, 1000);
try {
@SuppressLint("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");

Date futureDate = dateFormat.parse(examTime);
Date currentDate = new Date();
if (!currentDate.after(futureDate)) {
long difference = futureDate.getTime() - currentDate.getTime();

long months = difference / (30 * 24 * 60 * 60 * 1000);
difference -= months * (30 * 24 * 60 * 60 * 1000);
long days = difference / (24 * 60 * 60 * 1000);
difference -= days * (24 * 60 * 60 * 1000);
long hours = difference / (60 * 60 * 1000);
difference -= hours * (60 * 60 * 1000);
long minutes = difference / (60 * 1000);
difference -= minutes * (60 * 1000);
long seconds = difference / 1000;

txt_month.setText("" + String.format("%02d", months));
txt_day.setText("" + String.format("%02d", days));
txt_hour.setText("" + String.format("%02d", hours));
txt_min.setText("" + String.format("%02d", minutes));
txt_scd.setText("" + String.format("%02d", seconds));

}
} catch (Exception e) {
e.printStackTrace();
}
}
};
handler.postDelayed(runnable, 1000);
}
0 0
examTime توی جایی که میخوام استفاده کنم مثلا به این صورت وارد میکنم: countDownStart("2019-08-11 2300") (6 سال پیش)
0 0
یعنی سال-ماه-روز ساعتثانیه (6 سال پیش)
0 0
بخش نظرات باگ داره ببخشید من زیاد نظر میدم و درست ارسال نمیشه (6 سال پیش)
0 0
برادر عزیزم. من هرچی کدتو بررسی کردم چیزی ازش سرم نشد. زیاد وارد نیستم ، بزرا ببینیم سایر دوستان میتونن کمکی بکنن یا نه (6 سال پیش)
0 0
مرسی بابت زحمتی که کشیدید. منم دارم تحقیق میکنم اگه راهشو پیدا کردم اینجا میزارم (6 سال پیش)
0 0
خیلی هم عالی. میلاد پیشنهاد میکنم یک تصویر برای پروفایلت بزاری ، ترجیحا "گیک طوز" باشه ، تا راحتتر توی انجمن بشناسیمت. هر از چند گاهی بیا اینجا سر بزن خوشحال میشیم (6 سال پیش)
0 0
گیک طور (6 سال پیش)
0 0
حتما. ممنونم ازت (6 سال پیش)
پاسخ به سوال 
میلاد محمدی  6 سال پیش
0 0

 پاسخ صحیح

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

 
public void countDownStart(final String examTime) {
handler = new Handler();
runnable = new Runnable() {
@SuppressLint("DefaultLocale")
@Override
public void run() {
handler.postDelayed(this, 1000);
try {
@SuppressLint("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date futureDate = dateFormat.parse(examTime);
Date currentDate = new Date();
if (!currentDate.after(futureDate)) {
long difference = futureDate.getTime() - currentDate.getTime();

long totalDays = difference / (24 * 60 * 60 * 1000);

long day = TimeUnit.MILLISECONDS.toDays(difference);
day %= 365;
long month = day / 30;
day %= 30;
long hour = TimeUnit.MILLISECONDS.toHours(difference) - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(difference));
long min = TimeUnit.MILLISECONDS.toMinutes(difference) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(difference));
long sec = TimeUnit.MILLISECONDS.toSeconds(difference) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(difference));



txt_month.setText("" + String.format("%02d", month));
txt_day.setText("" + String.format("%02d", day));
txt_hour.setText("" + String.format("%02d", hour));
txt_min.setText("" + String.format("%02d", min));
txt_scd.setText("" + String.format("%02d", sec));
txt_mandeh.setText("" + String.format("%02d", totalDays) + " " + "روز تا زمان تعیین شده باقی‌ مانده است!");

}
} catch (Exception e) {
e.printStackTrace();
}
}
};
handler.postDelayed(runnable, 1000);
}
+1 0
تلاش شما قابل تحسین هست. ممنونم از اینکه کد خودتون رو به اشتراک گذاشتید و نسبت به پستی که در اینجا گذاشتید متعهد بودید و بهش برگشتید. موفق باشی برادرم. (6 سال پیش)
0 0
خیلی ممنونم. شما لطف دارید. موفق‌تر باشید :) (6 سال پیش)

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