Javaで経過時間を測定するにはどうすればよいですか? [重複] 質問する

Javaで経過時間を測定するにはどうすればよいですか? [重複] 質問する

次のようなものがほしいです:

public class Stream
{
    public startTime;
    public endTime;

    public getDuration()
    {
        return startTime - endTime;
    }
}

また、たとえば、開始時刻が 23:00 で終了時刻が 1:00 の場合、継続時間は 2:00 になるということも重要です。

Java でこれを実現するにはどの型を使用すればよいでしょうか?

ベストアンサー1

残念ながら、これまでに投稿された 10 の回答はどれも正確ではありません。

経過時間を計測していて、正確な値を求める場合は、 を使用する必要があります。結果が間違っていても構わない場合を除き、System.nanoTime()は使用できません。System.currentTimeMillis()

の目的は経過nanoTime時間を測定することであり、 の目的は実時間を測定することです。一方を他方の目的に使用することはできません。その理由は、コンピュータのクロックは完璧ではないからです。常にずれが生じ、時々修正が必要になります。この修正は手動で行うか、ほとんどのマシンの場合、システム クロック (「実時間」) に小さな修正を継続的に発行するプロセスが実行されます。これらは頻繁に発生する傾向があります。このような修正は、うるう秒があるたびに発生します。currentTimeMillis

の目的は経過時間を測定することなのでnanoTime、これらの小さな修正のいずれにも影響されません。これは、使用したいものです。 で現在進行中のタイミングはすべてずれcurrentTimeMillis、マイナスになる可能性もあります。

「これは実際にはそれほど重要ではないように思える」と言うかもしれませんが、そうではないかもしれませんが、全体として、正しいコードは間違ったコードよりも優れているのではないでしょうか。それに、nanoTimeとにかく入力する時間が短くなります。

以前投稿された免責事項では、nanoTime通常はマイクロ秒単位の精度しかないと述べられていますが、これは有効です。また、状況によっては、呼び出しに 1 マイクロ秒以上かかることもあります (他の場合も同様)。そのため、非常に短い間隔を正確に計測できるとは期待しないでください。

おすすめ記事