aboutsummaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/src/main/java/io/opencensus/common/Duration.java15
-rw-r--r--api/src/test/java/io/opencensus/common/DurationTest.java11
2 files changed, 26 insertions, 0 deletions
diff --git a/api/src/main/java/io/opencensus/common/Duration.java b/api/src/main/java/io/opencensus/common/Duration.java
index 1ee97191..57ca87fe 100644
--- a/api/src/main/java/io/opencensus/common/Duration.java
+++ b/api/src/main/java/io/opencensus/common/Duration.java
@@ -23,6 +23,7 @@ import static io.opencensus.common.TimeUtils.NANOS_PER_MILLI;
import com.google.auto.value.AutoValue;
import io.opencensus.internal.Utils;
+import java.util.concurrent.TimeUnit;
import javax.annotation.concurrent.Immutable;
/**
@@ -79,6 +80,20 @@ public abstract class Duration implements Comparable<Duration> {
}
/**
+ * Converts a {@link Duration} to milliseconds.
+ *
+ * <p>Note that there could be overflow or loss of precision by making this conversion. See {@link
+ * TimeUnit#convert(long, TimeUnit)} for details.
+ *
+ * @param duration a {@code Duration}.
+ * @return the milliseconds representation of this {@code Duration}.
+ */
+ public static long toMillis(Duration duration) {
+ return TimeUnit.SECONDS.toMillis(duration.getSeconds())
+ + TimeUnit.NANOSECONDS.toMillis(duration.getNanos());
+ }
+
+ /**
* Returns the number of seconds in the {@code Duration}.
*
* @return the number of seconds in the {@code Duration}.
diff --git a/api/src/test/java/io/opencensus/common/DurationTest.java b/api/src/test/java/io/opencensus/common/DurationTest.java
index 40682fc4..d46f2f7a 100644
--- a/api/src/test/java/io/opencensus/common/DurationTest.java
+++ b/api/src/test/java/io/opencensus/common/DurationTest.java
@@ -88,4 +88,15 @@ public class DurationTest {
assertThat(Duration.create(-25, -42)).isNotEqualTo(Duration.create(-24, -42));
assertThat(Duration.create(-24, -43)).isNotEqualTo(Duration.create(-24, -42));
}
+
+ @Test
+ public void toMillis() {
+ assertThat(Duration.toMillis(Duration.create(10, 0))).isEqualTo(10000L);
+ assertThat(Duration.toMillis(Duration.create(10, 1000))).isEqualTo(10000L);
+ assertThat(Duration.toMillis(Duration.create(0, (int) 1e6))).isEqualTo(1L);
+ assertThat(Duration.toMillis(Duration.create(0, 0))).isEqualTo(0L);
+ assertThat(Duration.toMillis(Duration.create(-10, 0))).isEqualTo(-10000L);
+ assertThat(Duration.toMillis(Duration.create(-10, -1000))).isEqualTo(-10000L);
+ assertThat(Duration.toMillis(Duration.create(0, -(int) 1e6))).isEqualTo(-1L);
+ }
}