1. 概要

DutyFiniteDurationはどちらも時間枠を表します。 Duration は抽象クラスであり、FinishDurationDurationの最終的な実装です。 この記事では、これらのクラスのユースケース、変換、およびユーティリティ関数について説明します。

2. 初期化、演算子、および比較

2.1. 初期化

duration オブジェクトは、さまざまな方法でインスタンス化できます。

val duration1 = Duration("5 seconds")
val duration2 = Duration(5, TimeUnit.SECONDS)
val duration3 = 5.seconds
val duration4 = 250.millis

2.2. オペレーター

duration は、+ 、および*演算子をサポートします。

val addition = Duration("5 seconds") + Duration(5, TimeUnit.SECONDS) // 10 seconds
val subtraction = 5.seconds - 5.seconds // 0 seconds
val product = 5.seconds * 3 // 15 seconds

除算も使用できます。除算には次の2つのバリエーションがあります。

val division1 = 5.seconds / 2 // 2500 milliseconds
val division2 = 5.seconds / Duration("5 seconds") // 1.0

期間を数値で割ると、基本的に配当を指定された数値で割った新しい期間になります。一方、期間を期間で割ると、除数の回数を表す数値になります。配当を得るには乗算する必要があります。

2.3. 比較

比較は、演算子<、<=、>、および>=を介してサポートされます。

val result1 = 5.seconds < 1000.millis // false
val result2 = 5.seconds <= 1000.millis // false
val result3 = 5.seconds > 1000.millis // true
val result4 = 5.seconds >= 1000.millis // true

2つの指定された期間オブジェクトを比較する別の方法は、 compare()関数です。

val result5 = 5.seconds.compare(1000.millis) // 1

compare()関数は、比較された duration が引数よりも大きい場合は正の数を返し、比較された Duty が引数よりも小さい場合は負の数を返し、ゼロを返します。 2つのDurationが等しい場合。

3. コンバージョンとユーティリティ

3.1. TimeUnit変換

関連するヘルパー関数を使用して、durationの時間単位を抽出できます。

20.days.toMillis // 1728000000L
20.days.toSeconds // 1728000L
20.days.toHours // 480L
20.days.toMinutes // 28800L

3.2. 期限の変換

Deadline は、時間ベースのカウントダウンについて説明しています。 関数fromNowDurationDeadlineに変換します。

val deadline = 100.millis.fromNow // Deadline(1302934436354298 nanoseconds)
val hasTimeLeft = deadline.hasTimeLeft() // true
val isOverdue = deadline.isOverdue() // false
Thread.sleep(100L) // sleeping for the duration of the deadline
val hasTimeLeft2 = deadline.hasTimeLeft() // false
val isOverdue2 = deadline.isOverdue() // true

3.3. 粗い

関数toCoarsestは、durationを可能な限り最も粗い単位に返します。

5000.millis.toCoarsest // 5 seconds
5.seconds.toCoarsest // 5 seconds

4. 結論

この記事では、DurationおよびFiniteDurationクラスの基本的な使用法、変換、およびユーティリティ関数を紹介しました。