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

Android显示设备之间的剩余时间不同,android,time,simpledateformat,Android,Time,Simpledateformat,我正在开发一个Android应用程序,它会在一段时间后自动终止。我在actionbar中添加了一个按钮,它应该向用户显示剩余时间。代码如下: String srt = getResources().getString(R.string.remainingTime) + " "; DateFormat fmt = new SimpleDateFormat("HH:mm:ss"); long gt = timeKeeper.getTimeUntilTermination() - timeKeepe

我正在开发一个Android应用程序,它会在一段时间后自动终止。我在actionbar中添加了一个按钮,它应该向用户显示剩余时间。代码如下:

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上测试时,toast包含适当的剩余时间,如00:44:32,但在手机上,toast说01:44:32是因为一些奇怪的原因,只是为了让人更困惑,应用程序仍然在00:44:32后终止-额外的时间只显示在toast中。同一段代码如何可能根据它是模拟器还是手机生成不同的结果

包含时间变量的类已简化:

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

    public long getTimeUntilTermination() {return timeUntilTermination;}
    public long getElapsedTime() {return elapsedTime;}
}
该活动有一个静态计时器对象和一个方法:

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);
}
你需要利用现在的时间。
这在其他手机中可能会有所不同,因为需要进行配置。

如果您添加方法执行的操作GetTimeUntFiltermination、getElapsedTime和countdownStartedAt变量,这会有所帮助。请记住System.currentTimeMillis不应用于经过时间的测量使用nanoTime代替有趣的是,在我的代码中,其他与时间相关的操作都可以正常工作。只有这段代码显示错误的时间,原因我不明白。Android的一切都是随机的。TimeUntilternation和elapsedTime的值是您设置的值吗?或者这些是从哪里来的?我可以从系统中看到倒计时开始。currentTimeMillis,但其他人不知道值是什么。现在一切都应该清楚了。