6

我使用 System.currentTimeMillis() 来保存用户开始活动的时间。

public class TimeStamp {
protected long _startTimeMillis = System.currentTimeMillis();

public String getStartTime() {
    return new Time(_startTimeMillis).toString();
}

该类在活动开始时被实例化,并且 getStartTime() 返回正确的时间。我还尝试获取活动开始后经过的时间。

public String getElapsedTime() {
    return new Time(System.currentTimeMillis() - _startTimeMillis).toString();
}

使用模拟的 android 设备(android 4.0.3)可以很好地工作。但是,当我在我的真实 android 设备 (android 4.0.3) 上部署应用程序时,getElapsedTime() 会额外增加一小时,然后正常计数。所以在我的真实设备上 getElapsedTime() 将在活动开始后返回“01:00:01”,但它应该返回“00:00:01”。

你知道为什么会发生这种情况吗?

4

3 回答 3

11

你应该使用SystemClock.uptimeMillis().

uptimeMillis() 自系统启动后以毫秒为单位计算,并保证是单调的,而 System.currentTimeMillis() 不是因为用户或应用程序可以随时更改它。此外,通常启用自动时间同步,可以随时更改时间。

于 2012-08-14T14:52:57.483 回答
1

您不能使用时间来表示 2 个瞬间之间的差异。在您的代码中,getElapsedTime() 返回接近 0 的时间,该时间被解释为 1970 年 1 月 1 日。我认为您遇到问题的原因是因为您的设备上没有相同的时区,因此时间的起源不是午夜。

于 2012-08-14T15:00:25.170 回答
0

System.currentTimeMillis() 返回设备时钟时间和纪元日期之间经过的毫秒数。这就是为什么它会因设备而异。

http://developer.android.com/reference/java/lang/System.html#currentTimeMillis ()

于 2012-08-14T14:58:48.197 回答