summaryrefslogtreecommitdiffstats
path: root/jdisc_core
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@verizonmedia.com>2020-02-27 14:33:46 +0100
committerHåkon Hallingstad <hakon@verizonmedia.com>2020-02-27 14:33:46 +0100
commit72b96c204b9b9e28d0e7d611431ddae3282473ec (patch)
tree5959c798818a9abdae50baf818b9be652a6cb8b0 /jdisc_core
parentcd00f3cf5e3ed3f78417241871ad06518a0dee46 (diff)
Convert Timer to/from UTC Clock
Diffstat (limited to 'jdisc_core')
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/Timer.java31
1 files changed, 28 insertions, 3 deletions
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/Timer.java b/jdisc_core/src/main/java/com/yahoo/jdisc/Timer.java
index a111425fbc0..4db30636137 100644
--- a/jdisc_core/src/main/java/com/yahoo/jdisc/Timer.java
+++ b/jdisc_core/src/main/java/com/yahoo/jdisc/Timer.java
@@ -4,7 +4,10 @@ package com.yahoo.jdisc;
import com.google.inject.ImplementedBy;
import com.yahoo.jdisc.core.SystemTimer;
+import java.time.Clock;
import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
/**
* <p>This class provides access to the current time in milliseconds, as viewed by the {@link Container}. Inject an
@@ -29,11 +32,33 @@ public interface Timer {
*/
long currentTimeMillis();
- /**
- * Convenience method for getting an java.util.Instance from currentTimeMillis().
- */
+ /** Convenience method for getting an java.util.Instance from currentTimeMillis(). */
default Instant currentTime() {
return Instant.ofEpochMilli(currentTimeMillis());
}
+ /** Return a UTC Clock backed by this timer. */
+ default Clock toUtcClock() {
+ return new ClockAdapter(this, ZoneOffset.UTC);
+ }
+
+ /** Create a Timer backed by the given Clock. */
+ static Timer fromClock(Clock clock) {
+ return clock::millis;
+ }
+
+ class ClockAdapter extends Clock {
+ private final Timer timer;
+ private final ZoneId zoneId;
+
+ private ClockAdapter(Timer timer, ZoneId zoneId) {
+ this.timer = timer;
+ this.zoneId = zoneId;
+ }
+
+ @Override public ZoneId getZone() { return zoneId; }
+ @Override public Clock withZone(ZoneId zone) { return new ClockAdapter(timer, zoneId); }
+ @Override public Instant instant() { return timer.currentTime(); }
+ }
+
}