時間番号を渡したいのですが、TimeUnit
それは入っています。
long number = some number;
TimeUnit timeUnit = some arbitrary time unit
Object
Java ライブラリからtime と timeUnit の両方を保持できるものは何ですか?
数値と任意の をカプセル化する Java ライブラリ オブジェクトはありませんTimeUnit
。ただし、Java 8 には、必要な時間単位に変換するものがあります。
java.time.Duration
期間は、提供された数量を格納し、他のすべての時間単位との比較と変換を提供します。例えば:
// Create duration from nano time
Duration systemTime = Duration.ofNanos(System.nanoTime());
// Create duration from millis time
Duration systemTime = Duration.ofMillis(System.currentTimeMillis());
もちろん、足し算、引き算、またはその他の数学演算を行う場合、精度は現在の演算と指定された の精度と同程度になりDuration
ます。
/**
* Example that tells if something has reached the required age
* TRUE IF THE current system time is older or equal to the required system time
*/
// TRUE IF THE FILE HAS NOT WAITED ENOUGH TIME AFTER LAST CREATE/MODIFY
private boolean isMature() {
// it is not known whether required age is nanos or millis
Duration requiredAge = systemTimeWhenMature();
// so create a duration in whatever time unit you have
// more precise = possibly better here
Duration actualAge = Duration.ofNanos(System.nanoTime());
// if ON or OLDER THAN REQUIRED AGE
// actualAge - requiredAge = balance
// 20 - 21 = -1 (NOT MATURE)
// 21 - 21 = 0 (OK)
// 22 - 21 = 1 (OK)
Duration balance = actualAge.minus(requiredAge);
if (balance.isNegative()) {
logger.info("Something not yet expired. Expires in {} millis.", balance.negated());
return false;
} else {
return true;
}
}
また、Duration には、格納された量をさまざまな単位で変換および処理するのに役立つメソッドが他にもたくさんあります。
精度が計算に与える影響を理解することが重要です。これは、例によって一般的な精度の契約を示しています。
// PICK A NUMBER THAT IS NOT THE SAME WHEN CONVERTED TO A LESSER PRECISION
long timeNanos = 1234567891011121314L;
long timeMillis = TimeUnit.MILLISECONDS.convert(timeNanos, TimeUnit.NANOSECONDS);
// create from milliseconds
Duration millisAccurate = Duration.ofMillis(timeMillis);
Duration nanosAccurate = Duration.ofNanos(timeNanos);
// false because of precision difference
assertFalse(timeMillis == timeNanos);
assertFalse(millisAccurate.equals(nanosAccurate));
// true because same logical precision conversion takes place
assertTrue(timeMillis - timeNanos <= 0);
assertTrue(millisAccurate.minus(nanosAccurate).isNegative());
// timeNanos has greater precision and therefore is > timeMillie
assertTrue(timeNanos - timeMillis > 0);
assertTrue(nanosAccurate.minus(millisAccurate).negated().isNegative());
一言で言えば..見つけるのにこんなに時間がかかったなんて信じられないDuration
!:)
TimeUnit は、Second、Milliseconds などの時間単位タイプを保持する列挙型です。
TimeUnit は時間を保持するためのものではありませんが、TimeUnit API を使用して単位の時間を別の単位に変換できます。
時間とその単位を保持するオブジェクトを作成する必要があると思います。
Java 8 を使用している場合。新しい Date API を使用できます。
http://download.java.net/jdk8/docs/api/java/time/package-summary.html
Joda-Time にはIntervalがありますが、JRE の包括的なオブジェクト タイプのみを使用する場合は、Java Bean を作成する必要があります (おそらく Interval と呼びます)。