< prev index next >

src/java.base/share/classes/java/util/concurrent/TimeUnit.java

Print this page

        

@@ -33,10 +33,13 @@
  * http://creativecommons.org/publicdomain/zero/1.0/
  */
 
 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,
  * and to perform timing and delay operations in these units.  A
  * {@code TimeUnit} does not maintain time information, but only

@@ -388,6 +391,64 @@
             int ns = excessNanos(timeout, ms);
             Thread.sleep(ms, ns);
         }
     }
 
+    /**
+     * 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);
+        }
+    }
+
 }
< prev index next >