All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yahoo.jdisc.Timer Maven / Gradle / Ivy

// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
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;

/**
 * 

This class provides access to the current time in milliseconds, as viewed by the {@link Container}. Inject an * instance of this class into any component that needs to access time, instead of using * System.currentTimeMillis().

* * @author Simon Thoresen Hult */ @ImplementedBy(SystemTimer.class) public interface Timer { /** *

Returns the current time in milliseconds. Note that while the unit of time of the return value is a * millisecond, the granularity of the value depends on the underlying operating system and may be larger. For * example, many operating systems measure time in units of tens of milliseconds.

* *

See the description of the class Date for a discussion of slight discrepancies that may arise * between "computer time" and coordinated universal time (UTC).

* * @return The difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC. * @see java.util.Date */ long 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(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy