Android显示设备之间的剩余时间不同

时间:2015-02-26 17:05:55

标签: android time simpledateformat

我正在开发一款Android应用,它会在一段时间后终止。我在操作栏上添加了一个按钮,它应该向用户显示剩余时间。这是代码:

String srt = getResources().getString(R.string.remainingTime) + " ";
DateFormat fmt = new SimpleDateFormat("HH:mm:ss");

long gt = timeKeeper.getTimeUntilTermination() - timeKeeper.getElapsedTime(); // gotten from elsewhere
long ct = System.currentTimeMillis() - countdownStartedAt;
Date rt = new Date(gt - ct); // remaining time

showToast(srt + fmt.format(rt));

在AVD上测试时,吐司包含适当的剩余时间(如“00:44:32”),但是在手机上吐司说“01:44:32”出于某些奇怪的原因(而且只是为了更多)混乱,应用程序仍然在00:44:32之后终止 - 额外的小时仅在吐司中显示。根据它是模拟器还是手机,同一段代码如何产生不同的结果?

包含时间变量的类(简化):

public class TimeKeeper
{
    private long timeUntilTermination;
    private long elapsedTime;

    public long getTimeUntilTermination() {return timeUntilTermination;}
    public long getElapsedTime() {return elapsedTime;}
}

Activity有一个静态的TimeKeeper对象和一个方法:

public void startTimeCountDown()
{       
    timeHandler = new Handler();
    timeHandler.postDelayed(new Runnable() {
        // terminating
    }, timeKeeper.getTimeUntilTermination() - timeKeeper.getElapsedTime());

    countdownStartedAt = System.currentTimeMillis();
}

他们都像他们应该的那样工作。这只是通知错了。

timeUntiltermination变量在此方法中设置:

private void setTimeUnilTermination()
{
    long tut = (timePicker.getCurrentHour() * 3600000) +
        (timePicker.getCurrentMinute() * 60000);
    timeKeeper.setTimeUntilTermination(tut);
}

自动保存中使用的方法,因此如果用户退出并重新启动应用程序,计时器将从停止的位置重新启动。经过的时间保存到文件中然后回读。没有修改。

private void keepElapsedTimeJustInCase() {
    timeKeeper.setElapsedTime(System.currentTimeMillis() - countdownStartedAt);
}

1 个答案:

答案 0 :(得分:0)

您需要使用nowTime。 其他手机可能会有所不同,因为需要进行配置。