--- old/src/java.base/share/classes/java/util/concurrent/TimeUnit.java 2016-01-27 19:25:49.657806484 +0300 +++ new/src/java.base/share/classes/java/util/concurrent/TimeUnit.java 2016-01-27 19:25:49.438806484 +0300 @@ -35,6 +35,9 @@ package java.util.concurrent; +import java.time.temporal.ChronoUnit; +import java.util.Objects; + /** * A {@code TimeUnit} represents time durations at a given unit of * granularity and provides utility methods to convert across units, @@ -390,4 +393,62 @@ } } + /** + * Converts this {@code TimeUnit} to an equivalent {@code ChronoUnit}. + * + * @return the converted equivalent ChronoUnit + * @throws IllegalArgumentException if this TimeUnit cannot be converted + * @since 9 + */ + public ChronoUnit toChronoUnit() { + switch (this) { + case NANOSECONDS: + return ChronoUnit.NANOS; + case MICROSECONDS: + return ChronoUnit.MICROS; + case MILLISECONDS: + return ChronoUnit.MILLIS; + case SECONDS: + return ChronoUnit.SECONDS; + case MINUTES: + return ChronoUnit.MINUTES; + case HOURS: + return ChronoUnit.HOURS; + case DAYS: + return ChronoUnit.DAYS; + default: + throw new IllegalArgumentException("Unknown TimeUnit"); + } + } + + /** + * Converts a {@code ChronoUnit} to an equivalent {@code TimeUnit}. + * + * @param chronoUnit the ChronoUnit to convert, not null + * @return the converted equivalent TimeUnit + * @throws IllegalArgumentException if {@code chronoUnit} cannot be converted + * @since 9 + */ + public static TimeUnit of(ChronoUnit chronoUnit) { + Objects.requireNonNull(chronoUnit, "chronoUnit"); + switch (chronoUnit) { + case NANOS: + return TimeUnit.NANOSECONDS; + case MICROS: + return TimeUnit.MICROSECONDS; + case MILLIS: + return TimeUnit.MILLISECONDS; + case SECONDS: + return TimeUnit.SECONDS; + case MINUTES: + return TimeUnit.MINUTES; + case HOURS: + return TimeUnit.HOURS; + case DAYS: + return TimeUnit.DAYS; + default: + throw new IllegalArgumentException("No TimeUnit equivalent for " + chronoUnit); + } + } + }