web-dev-qa-db-ja.com

JavaにTimeSpanのようなクラスがありますか

Java.utilにTimeSpanが必要かどうか疑問に思っていたので、これら2つの時間の間に何時間、分、秒があるかを定義できます。

このTimeSpanから、2つの時間間隔を取得できます。お気に入り

TimeSpan getTimeSpan( Date before, Date after ){...}

または

long timeSpan = System.currentTimeMillis();
// ... long job
timeSpan = System.currentTimeMillis() - timeSpan;

TimeSpan ts = new TimeSpan(timeSpan);

このTimeSpanを使用して、SimpleDateFormatで使用できます。

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
format.format( timsSpan );

これが既にJavaで実装されているが、まだ発見されていない。

47

JDK 8では、SDKの日時ライブラリが強化されており、使用できます。

Duration または Period

Interval JodaTimeが行います。

時間間隔は、2つの瞬間の間の期間を表します。間隔には、開始の瞬間が含まれ、終了の瞬間は含まれません。終了インスタントは常に開始インスタント以上です。

間隔のミリ秒は固定されています。これは、開始と終了の瞬間の違いです。期間は、ReadableDurationによって個別に表されます。その結果、間隔は比較できません。 2つの間隔の長さを比較するには、それらの期間を比較する必要があります。

間隔は、ReadablePeriodに変換することもできます。これは、年や日などのフィールドに関する開始点と終了点の違いを表します。

間隔はスレッドセーフで不変です。

30
Jigar Joshi

Java 8では、適切なタイムライブラリが標準APIに追加されました(これは、JodaTimeに大きく基づいています)。

その中に、期間を示すために使用できる2つのクラスがあります。

  1. Duration これは、タイムスパンの秒またはナノ秒の長さを示します。
  2. Period これは、「x年とyか月など」として保存される、よりユーザーフレンドリーな違いを示します。

それらの違いの詳細な説明は Javaチュートリアル にあります。

26
Thirler

Java 8(またはそれ以上)を使用している場合、または単にJodaTimeをインポートしたくない場合(JodaTimeの著者自身 suggest migrating をJava.timeに)) :Java 8は Periods でその機能を提供します。チュートリアルについてはこちらを参照してください: https://docs.Oracle.com/javase/tutorial/datetime /iso/period.html

ここでOracleチュートリアルを引用します。

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() +
                   " months, and " + p.getDays() +
                   " days old. (" + p2 + " days total)");

コードは、次のような出力を生成します。

You are 53 years, 4 months, and 29 days old. (19508 days total)
3
Anton Kaiser

あなたが代替のより軽いバージョンを探しているなら、私自身のAndroid app。 https://github.com/ashokgelal/サマヤ

申し訳ありませんが、その使用法に関するドキュメントはありませんが、対応する.net Timespanクラスと非常によく似ています。また、使用方法に関する多くの例を含むいくつかの単体テストがあります。

1
ashokgelal