2017-02-10 45 views
1

AndroidでEpochからナノ秒の時間を見つけるにはどうすればいいですか? APIS以下エポック時間をナノ秒で測定する - Android

が用意されていますが、彼らは単にブート

  1. SystemClock.elapsedRealtimeNanos()からの時間を与える - ブートからの経過時間が、深い睡眠時間を含む
  2. System.getnano() - >これは、深い睡眠時間なしで起動からの時間までです。

エポックタイムでは、利用できるAPIは1つしかないようです。

  • System.currentTimeMillis() - >エポックからの経過時間をミリ秒で示します。

エポックからの時間をナノ秒単位で取得する同様のAPI /新しいアプローチがありますか。

PS:1970年1月1日UTCから経過した時間を意味します。

+0

Javaは 'clock_gettime'関数を提供していませんので、より正確なタイミングを取ることがJNIを介して行われます.JNIを呼び出してオーバーヘッドが発生するので、100%正確ではありません。 –

+0

@Rod_Algonquinありがとう。 System.currentTimeMillis()もネイティブ呼び出しであることがわかります。だから私はJNIを使​​用するのは大丈夫ですが、私はナノ秒を与えることができるアンドロイドの利用可能なAPISを探していました。私は今のところ利用できないと思います。 –

+0

@Rod_Algonquin私はcurrentTimeMillis()のネイティブ実装を見ようとしていますが、souceを見つけることはできません。どこにいるのか分かっているなら、私と分かち合ってください..それは私を助けます。 –

答えて

0

TimeUnitクラスを使用してミリ秒をnanosに変換できます。お試しください

long nanos = TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()); 
+0

これはそれを変換するだけです。それは正確ではないでしょう。私は実際の時間をナオセ秒で測定したいと思います –

0

デバイスの電源がオフの場合、デバイスは正確なクロックでナノ秒をカウントできません。 CPUは行いますが、開始からしかカウントされません。

+0

私はそうは思わない。ネイティブコードからclock_gettime(CLOCK_REALTIME、&ts)を使用して、ナノ秒を得ることができます。私はネイティブコードからそれを確認しました。それはうまく動作します。私はJNI /ネイティブコードを使用せずにアンドロイドアプリケーションから同様の価値を得るために探しています.. –

関連する問題