Scalaの期間とFiniteDurationのガイド
1. 概要
DutyとFiniteDurationはどちらも時間枠を表します。 Duration は抽象クラスであり、FinishDurationはDurationの最終的な実装です。 この記事では、これらのクラスのユースケース、変換、およびユーティリティ関数について説明します。
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 は、時間ベースのカウントダウンについて説明しています。 関数fromNowはDurationをDeadlineに変換します。
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クラスの基本的な使用法、変換、およびユーティリティ関数を紹介しました。