Reputation: 191
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
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
Upvotes: 0
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
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
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
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
Reputation: 56
int secondsUntilFinished = milisUntilFinished / 1000;
int seconds = secondsUntilFinished % 60;
int mins = secondsUntilFinished / 60;
Upvotes: 1
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
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