倒数计时器从日期开始

时间:2013-12-16 16:15:51

标签: android date time countdowntimer

我正在尝试使用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 个答案:

答案 0 :(得分:2)

您必须在

中进行更正
FestCountdownTimer timer = new FestCountdownTimer(00, 00, 9, 26, 11,
            2013);

而不是:

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

因为:

void android.text.format.Time.set(int second,int minute,int hour,int monthDay,int month,int year)

设置方法工作如下:

public void set(int second,int minute,int hour,int monthDay,int month,int year) 在API级别3中添加 设置字段。将weekDay,yearDay和gmtoff设置为0,将isDst设置为-1。如果需要,请调用normalize(boolean)。

答案 1 :(得分:2)

android.text.format.Time上记录了月份值范围从0到11,因此12月应该在此api中具有(非直观)值11。因此,当你说12而不是11时,所以你的未来日期是在1月,然后你再追加30/31天,这可以解释你的结果是40而不是10天。

我很遗憾你使用这么糟糕的api。