Mobile Developer
Mobile Developer

Reputation: 191

How to display minutes and seconds in countdowntimer

I need some help. I cannot be able to display the number for minutes correctly as it give 0 instead of the number I desire but the second work fine. Here is my code:

new CountDownTimer(90000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            tvTime.setText("Time remaining: " + String.format("%d min: %d sec",
                    TimeUnit.MICROSECONDS.toMinutes( millisUntilFinished),
                    TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
        }
 });

I want it to display in 1 min:30 sec instead of 0 min:30 sec at the start of the countdown.

Upvotes: 8

Views: 15531

Answers (8)

Yohanes AI
Yohanes AI

Reputation: 3619

For someone who facing hour, minute, and second in a different views. Just re-use this code. It could decrease your development time :)

    new CountDownTimer(7200000, 1000) {
        @Override
        public void onTick(long millis) {
            // , , ;
            String hours = String.format(Locale.getDefault(), "%02d",
                    TimeUnit.MILLISECONDS.toHours(millis));
            String minutes = String.format(Locale.getDefault(), "%02d",
                    TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)));
            String seconds = String.format(Locale.getDefault(), "%02d",
                    TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
            hour.setText(hours);
            minute.setText(minutes);
            second.setText(seconds);
        }

        @Override
        public void onFinish() {
            hour.setText("00");
            minute.setText("00");
            second.setText("00");
        }
    }.start();

result

enter image description here

Upvotes: 0

Ashwin H
Ashwin H

Reputation: 723

mCountDownTimer = new CountDownTimer(3600000, 1000) {
                public void onTick(long millisUntilFinished) {
                    String day = TimeUnit.HOURS.toDays(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)) + "";
                    if (day.equalsIgnoreCase("0")) {
                        day = "";
                    } else if (day.equalsIgnoreCase("1")) {
                        day = day + "day ";
                    } else {
                        day = day + "days ";
                    }
                    String hr = (TimeUnit.MILLISECONDS.toHours(millisUntilFinished) - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(millisUntilFinished))) + "";
                    String min = (TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished))) + "";
                    String ss = (TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))) + "";
                    holder.txtDiscount.setText(productBean.getOfferDiscount() + "% OFF" + " Special offer ends in " + day + hr + ":" + min + ":" + ss);
                }
                public void onFinish() {
                    holder.txtDiscount.setVisibility(View.GONE);
                }
            }.start();

Upvotes: 0

Dheeraj Kumar
Dheeraj Kumar

Reputation: 103

## Try this one ##

private void startTimer(int noOfMinutes) {
CountDownTimer  countDownTimer = new CountDownTimer(noOfMinutes, 1000) {
        public void onTick(long millisUntilFinished) {
            long millis = millisUntilFinished;
            //Convert milliseconds into hour,minute and seconds
            String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
            countdownTimerText.setText(hms);//set text
        }
        public void onFinish() {
            countdownTimerText.setText("TIME'S UP!!"); //On finish change timer text
        }
    }.start();

}

Upvotes: 6

rafsanahmad007
rafsanahmad007

Reputation: 23881

Replace your code with this:

  new CountDownTimer(90000, 1000) { // adjust the milli seconds here

    public void onTick(long millisUntilFinished) {
    tvTime.setText("Time remaining: "+String.format("%d min, %d sec", 
                    TimeUnit.MILLISECONDS.toMinutes( millisUntilFinished),
                    TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
    }

Upvotes: 0

Rathiga Jesika
Rathiga Jesika

Reputation: 357

 CountDownTimer myCountDownTimer = new CountDownTimer(
            i, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {

            int time = (int) millisUntilFinished;
            int seconds = time / 1000 % 60;
            int minutes = (time / (1000 * 60)) % 60;
            timeText.setText(twoDigitString(minutes)  + " min: "+ twoDigitString(seconds)+ " sec");
        }
        private String twoDigitString(long number) {
            if (number == 0) {
                return "00";
            } else if (number / 10 == 0) {
                return "0" + number;
            }
            return String.valueOf(number);
        }
        @Override
        public void onFinish() {
            timeText.setText("00:00");
        }
        }

Try this code.

Upvotes: 0

user2310252
user2310252

Reputation: 56

int secondsUntilFinished = milisUntilFinished / 1000;

int seconds = secondsUntilFinished % 60;
int mins = secondsUntilFinished / 60;

Upvotes: 1

yash tandon
yash tandon

Reputation: 38

long millisUntilFinished is the milisecond left you can get seconds left by dividing it bu 1000 and can get minutes left by dividing it again by 60

Upvotes: 0

Deepak Goyal
Deepak Goyal

Reputation: 4907

Try this

String text = String.format(Locale.getDefault(), "Time Remaining %02d min: %02d sec", 
              TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60, 
              TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60);
tvTime.setText(text);

Upvotes: 22

Related Questions