次のようなものがほしいです:
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 マイクロ秒以上かかることもあります (他の場合も同様)。そのため、非常に短い間隔を正確に計測できるとは期待しないでください。