رفتن به مطلب
  • 0

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


Milad-Mohammadi

سوال

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

حس میکنم مشکل توی بخش ضرب و تقسیم روزها باشه!

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);
}

 

examTime همون زمان آینده هست که روزشماری میشه تا اون. و به این صورت از بیرون داده میشه:

countDownStart("2020-02-01 23:50:00");

 

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

2 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در 3 دقیقه قبل، محمدرضا شاهپیری گفته است :

سلام.

سوال دوست دیگرمون هم بوده. کد زیر رو تست کنید.


SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy, HH:mm:ss");
        formatter.setLenient(false);


        String endTime = "25.06.2017, 15:05:36"

        Date endDate;
        try {
            endDate = formatter.parse(endTime);
            milliseconds = endDate.getTime();

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

         startTime = System.currentTimeMillis();

         diff = milliseconds - startTime;


           mCountDownTimer = new CountDownTimer(milliseconds, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {

                startTime=startTime-1;
                Long serverUptimeSeconds =
                        (millisUntilFinished - startTime) / 1000;

                String daysLeft = String.format("%d", serverUptimeSeconds / 86400);
                txtViewDays.setText(daysLeft);

                String hoursLeft = String.format("%d", (serverUptimeSeconds % 86400) / 3600);
                txtViewHours.setText(hoursLeft);

                String minutesLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) / 60);

                txtViewMinutes.setText(minutesLeft);

                String secondsLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) % 60);
                txtViewSecond.setText(secondsLeft);


            }

            @Override
            public void onFinish() {

            }
        }.start();

    }

 

ممنون بابت جوابتون

من تابع رو اینطور تغییر دادم و درست شد:

 

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);
}

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام.

سوال دوست دیگرمون هم بوده. کد زیر رو تست کنید.

SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy, HH:mm:ss");
        formatter.setLenient(false);


        String endTime = "25.06.2017, 15:05:36"

        Date endDate;
        try {
            endDate = formatter.parse(endTime);
            milliseconds = endDate.getTime();

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

         startTime = System.currentTimeMillis();

         diff = milliseconds - startTime;


           mCountDownTimer = new CountDownTimer(milliseconds, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {

                startTime=startTime-1;
                Long serverUptimeSeconds =
                        (millisUntilFinished - startTime) / 1000;

                String daysLeft = String.format("%d", serverUptimeSeconds / 86400);
                txtViewDays.setText(daysLeft);

                String hoursLeft = String.format("%d", (serverUptimeSeconds % 86400) / 3600);
                txtViewHours.setText(hoursLeft);

                String minutesLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) / 60);

                txtViewMinutes.setText(minutesLeft);

                String secondsLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) % 60);
                txtViewSecond.setText(secondsLeft);


            }

            @Override
            public void onFinish() {

            }
        }.start();

    }

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...