android - System.currentTimeMillis()无法按预期工作

时间:2012-08-14 14:50:35

标签: java android

我使用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”。

你有什么想法会发生这种情况吗?

3 个答案:

答案 0 :(得分:8)

您应该使用SystemClock.uptimeMillis()

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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