我正在尝试使用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?请帮忙。谢谢大家。
答案 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。