diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-02-27 14:33:46 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-02-27 14:33:46 +0100 |
commit | 72b96c204b9b9e28d0e7d611431ddae3282473ec (patch) | |
tree | 5959c798818a9abdae50baf818b9be652a6cb8b0 /jdisc_core/src | |
parent | cd00f3cf5e3ed3f78417241871ad06518a0dee46 (diff) |
Convert Timer to/from UTC Clock
Diffstat (limited to 'jdisc_core/src')
-rw-r--r-- | jdisc_core/src/main/java/com/yahoo/jdisc/Timer.java | 31 |
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(); } + } + } |