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()はさらに1時間で開始し、通常どおりカウントアップします。したがって、実際のデバイスでは、アクティビティの開始後に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 に答える