2013-08-04 2 views
0

Я разрабатываю для Android. Я использую таймер обратного отсчета для отображения обратного отсчета до определенной даты. во время этого сообщения он должен отображать что-то близкое к 18dys 12hrs 30min 55s. Но я получаю 49dys 19hrs 28min 31s. Я считаю, что мое преобразование в читаемую дату верное, но опять же, у меня нет опыта с этим таймером. Мои исследования ведут меня по кругу. Пожалуйста, взгляните на мой код и найдите любые ошибки, которые у меня могут быть. Заранее спасибо.CountDownTimer правильно отображает время

private void startCountdown() { 
    CountDownTimer mCountDownTimer; 
     Calendar cal1 = Calendar.getInstance(); 
     Calendar cal2 = Calendar.getInstance(); 
     cal2.set(Calendar.YEAR, 2013); 
     cal2.set(Calendar.MONTH, 8); 
     cal2.set(Calendar.DAY_OF_MONTH, 23); 
     cal2.set(Calendar.HOUR_OF_DAY, 7); 
     cal2.set(Calendar.MINUTE, 0); 

    long diffInMillis = cal2.getTimeInMillis() - cal1.getTimeInMillis(); 



     tvCount = (TextView) findViewById(R.id.tvCountdown); 

     mCountDownTimer = new CountDownTimer(diffInMillis, 1000) { 


      @Override 
      public void onFinish() { 
       tvCount.setText("VIEW FIGHT CARD"); 

      } 

      @Override 
      public void onTick(long millisUntilFinished) { 

       String days = null, hours = null, minutes = null, seconds = null; 
       long count = millisUntilFinished/DateUtils.DAY_IN_MILLIS; 
       if(millisUntilFinished > DateUtils.DAY_IN_MILLIS) { 

        if(count > 1) 
         days = (count)+("dys "); 
        else 
         days = (count)+("dy "); 

        millisUntilFinished %= DateUtils.DAY_IN_MILLIS; 
       } 
       if(millisUntilFinished > DateUtils.HOUR_IN_MILLIS) { 
        count = millisUntilFinished/DateUtils.HOUR_IN_MILLIS; 
        if(count > 1) 
         hours = (count) + "hrs "; 
        else 
         hours = count + "hr "; 

        millisUntilFinished %= DateUtils.HOUR_IN_MILLIS; 
       } 
       if(millisUntilFinished > DateUtils.MINUTE_IN_MILLIS) { 
        count = millisUntilFinished/DateUtils.MINUTE_IN_MILLIS; 

        minutes = count + "min"; 

        millisUntilFinished %= DateUtils.MINUTE_IN_MILLIS; 
       } 
       if(millisUntilFinished > DateUtils.SECOND_IN_MILLIS) { 
        count = millisUntilFinished/DateUtils.SECOND_IN_MILLIS; 

        seconds = count + "s"; 

        millisUntilFinished %= DateUtils.SECOND_IN_MILLIS; 
       } 



       tvCount.setText(days + hours + minutes +seconds + ""); 
      } 
     }; 
    mCountDownTimer.start(); 
    } 

ответ

1

Не забудьте в Java как месяц 0 индексируется так

января = 0, февраль = 1, ..., август = 7

Гораздо безопаснее использовать

cal2.set(Calendar.MONTH, Calendar.AUGUST); 
+0

Даже не подумал об этом. Спасибо. Вскоре я приму свой ответ. Любая идея, почему мои часы отключены? Может быть, потому, что его предполагается быть 24-часовым форматом? –

+0

О, ну, я идиот. У меня был час в коде. еще раз спасибо –

Смежные вопросы