2013-12-16 148 views
0

我試圖使用Android CountdownTimer類和Java Time從當天,小時,分鐘,秒到2013年12月26日上午9:00倒數實現'日期'倒計時器。下面是我的代碼:從日期倒數計時器

FestCountdownTimer timer = new FestCountdownTimer(00, 00, 9, 26, 12, 2013); 

new CountDownTimer(timer.getIntervalMillis(), 1000) { 

    @Override 
    public void onTick(long millisUntilFinished) { 
     int days = (int) ((millisUntilFinished/1000)/86400); 
     int hours = (int) (((millisUntilFinished/1000) 
       - (days * 86400))/3600); 
     int minutes = (int) (((millisUntilFinished/1000) 
       - (days * 86400) - (hours * 3600))/60); 
     int seconds = (int) ((millisUntilFinished/1000) % 60); 

     String countdown = String.format("%02dd %02dh %02dm %02ds", days, 
       hours, minutes, seconds); 
     countdownTimer.setText(countdown); 
    } 

    @Override 
    public void onFinish() { 
     countdownBegins.setVisibility(View.GONE); 
     countdownTimer.setText("IT'S HERE!"); 
    } 
}.start(); 

這裏是我的FestCountdownTimer類:

public class FestCountdownTimer { 

    private long intervalMillis; 

    public FestCountdownTimer(int second, int minute, int hour, int monthDay, int month, int year) { 

     Time futureTime = new Time(); 

     // Set date to future time 
     futureTime.set(second, minute, hour, monthDay, month, year); 
     futureTime.normalize(true); 
     long futureMillis = futureTime.toMillis(true); 

     Time timeNow = new Time(); 

     // Set date to current time 
     timeNow.setToNow(); 
     timeNow.normalize(true); 
     long nowMillis = timeNow.toMillis(true); 

     // Subtract current milliseconds time from future milliseconds time to retrieve interval 
     intervalMillis = futureMillis - nowMillis; 
    } 

    public long getIntervalMillis() { 
     return intervalMillis; 
    } 
} 

現在的小時,分​​鍾和秒的罰款。這只是天數到了40天。現在我將日期設置爲2013年的本月26日,因此目前26 - 16 = 10天。這大概應該是顯示的天數。那爲什麼會顯示40?請幫忙。感謝大家。

回答

2

android.text.format.Time有文件記錄月份的值範圍是從0到11,所以十二月份應該在這個API中有(不直觀的)值11。所以當你說12而不是11時,所以你的未來日期是1月,然後你是30/31天后的額外時間,這可以解釋你的結果40而不是10天。

我感到抱歉,你使用這樣一個糟糕的API。

+0

感謝兄弟。我也很抱歉。 – SynerFlow

2

你必須做出校正

FestCountdownTimer timer = new FestCountdownTimer(00, 00, 9, 26, 11, 
      2013); 

,而不是這樣的:

FestCountdownTimer timer = new FestCountdownTimer(00, 00, 9, 26, 12, 
      2013); 

因爲:

無效android.text.format.Time.set(INT第二,分整型,int hour,int monthDay,int month,int year)

設置方法像這樣:公共無效集(int second,int minute,int hour,int monthDay,int month,int year) 在API級別3中添加 設置字段。將weekDay,yearDay和gmtoff設置爲0,isDst設置爲-1。如果你需要這些,調用normalize(boolean)。

+1

非常感謝萬人! – SynerFlow