1

RunnableJava にラップされた 100ms ごとに Android アプリケーション内でを実行していますScheduledExecutorService。ブロックの一部としてrun()、現在の秒を 0 ~ 59、ミリ秒を 0 ~ 999 として取得する必要があります。UTC も使用できますが、どちらも現地時間である必要があります。

これを行うための絶対的な最速の方法は何ですか? 国際化/独自のカレンダーは必要ありません。

現在、私はCalendar以下の方法で使用していますが、使用して計算を行う方が高速になると考えていましたSystem.currentTimeMillis()。ご意見をいただければ幸いです。

Calendar calendar = Calendar.getInstance();
int seconds = calendar.get(Calendar.SECOND);

関連する場合、これは実際には Android アプリケーション内にあります。

明確にするために編集

現在の秒を 0 ~ 59 (つまり、現在の分を基準とする) として取得することは重要であるため、System.currentTimeMillis()前述のように計算コストがかかります。私が確信が持てなかったのは、この数学とシステムコールを実行する方が への呼び出しよりも速いかどうか、またはフットプリントがさらに少ない可能性があるCalendar他のオプション ( Joda Timeなど) があるかどうかでした。

参考までに、以下は、Unix タイムスタンプから秒数 (0 ~ 59) を取得するために思いついた最も簡単な方法です。

double seconds = Math.floor(((Math.floor(System.currentTimeMillis() / 1000) % 86400) % 3600) % 60);
4

1 に答える 1

6

より速いもの見つかりませんSystem.currentTimeMillis()

とはいえ、速くて正確であるとは限りません。いつものように: Joda Timeの使用を検討してください。ライブラリがなければ、すべてのエッジ ケースを正しくヒットすることはできません。

于 2012-12-10T19:03:34.253 に答える