11

特定の時刻からクロノメーターを開始する際に問題が発生しました。クロノメーターを開始したい Date オブジェクトがあります。

Date d = new Date(); //now, just for example
chronometer.setBase(d.getTime()); //long value of d
Log.d("Date: " , "d.getTime() time is [" + d.getTime() +"]");
Log.d("Chron: " , "chronometer.getBase() is [" + chronometer.getBase() +"]");
//let's print out elapsedRealtime from official sample
Log.d("Chron: " , "SystemClock.elapsedRealtime() is [" + SystemClock.elapsedRealtime() +"]");

出力:

06-02 13:35:23.025: D/Date:(928): d.getTime() time is [1338644123032]
06-02 13:35:23.037: D/Chron:(928): chronometer.getBase() is [1338644123032]
06-02 13:35:23.037: D/Chron:(928): SystemClock.elapsedRealtime() is [11624388]

実際、この長い時間の値が異なるのはなぜですか (11624388 と 1338644123032)?

ベースからクロノメーターを起動すると

chronometer.setBase(SystemClock.elapsedRealtime());

- 常に正常に動作します (「00:00」以降)

しかし、過去の日付 (fe 昨日) から日付を設定しようとすると:

chronometer.setBase(yesterday.getTime());

- 「00:0(」を表示し、毎秒最新の文字を「)」、「*」、「/」などに変更します

クロノメーターのベースを Date オブジェクトに設定する方法を教えてください。

4

2 に答える 2

4

実際、なぜこの長い時間の値が異なるのですか(11624388と1338644123032)?

SystemClock.elapsedRealtime()デバイスの電源がオンになってからのミリ秒数です。他の値はSystem.currentTimeMillis()、Unixエポックからのミリ秒数に基づいています。

クロノメーターベースをDateオブジェクトに設定する方法を教えてください。

あなたはそうしない。それはChronometer目的ではありません。のドキュメントをChronometer引用する:

開始時刻は、lapsedRealtime()タイムベースで指定でき、そこからカウントアップします。基準時刻を指定しない場合は、start()を呼び出した時刻が使用されます。

于 2012-06-02T14:05:30.197 に答える