1. ホーム
  2. java

[解決済み] Javaで経過時間を計測するには?[重複しています]

2022-03-16 03:21:05

質問

こんなのが欲しいんだけど

public class Stream
{
    public startTime;
    public endTime;

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

また、例えばstartTimeが23:00でendTimeが1:00の場合、2:00のデュレーションを得ることが重要である。

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

どのように解決するのですか?

残念ながら、これまでに投稿された10個の回答のうち、どれもまったく正しいものではありません。

経過時間を測定する場合、その経過時間を 正しい を使用する必要があります。 System.nanoTime() . を使用することはできません。 System.currentTimeMillis() ただし、結果が間違っていても構わないのであれば、この限りではありません。

の目的は nanoTime を測定することです。 経過時間 の目的は時間であり currentTimeMillis を測定することです。 壁掛け時計 時間です。一方をもう一方の目的に使うことはできません。なぜなら、コンピュータの時計は完璧ではなく、常にドリフトしており、時折修正する必要があるからです。 この修正は手動で行われるか、ほとんどのマシンの場合、システムクロック("wall clock")に小さな修正を継続的に発行するプロセスが実行されている可能性があります。これらは頻繁に発生する傾向があります。また、うるう秒が発生した場合にも、このような補正が行われます。

以来 nanoTime の目的は経過時間の計測なので、このような小さな補正の影響を受けることはありません。使いたいものです。現在進行中のどのタイミングでも currentTimeMillis はずれてしまい、場合によってはマイナスになってしまいます。

でも、全体的に見れば、正しいコードのほうが、正しくないコードよりも優れているのではないでしょうか? それに nanoTime の方が短く打てます。

以前投稿した免責事項 nanoTime は通常マイクロ秒の精度しかありませんが、これは有効です。また、状況によっては起動に1マイクロ秒以上かかることもあります(他のものも同様です)。