Programming for fun and profit

Programming tutorials, problems, solutions. Always with code.

Java Time Clock offset(Clock,Duration)


The method java.time.Clock.offset(Clock,Duration) returns a wrapper around given Clock with the specified Duration added. This clock implementation allows easily to jump into the past and future.

Method signature

The signature of the java.time.Clock.offset(Clock,Duration) method is as follows:

public static Clock offset(
        Clock baseClock,
        Duration offsetDuration)

The method is available since Java 8.


  • Clock baseClock: the clock to which add the duration to, not null,
  • Duration offset: the duration to add, not null.

Return value

Returns a clock based on the given clock with the duration added, never null.


  • NullPointerException: when any of the parameters is null.

Example usage

In the following code we use java.time.Clock.offset(Clock baseClock, Duration offset):


import java.time.Clock;
import java.time.Duration;
import java.time.ZoneId;

import static java.time.Instant.ofEpochMilli;

public class ClockExample {

    public static void main(String[] args) {
        Clock constClock = Clock.fixed(
                ofEpochMilli(0), ZoneId.systemDefault());
        System.out.println("Current millis: "
                + constClock.millis());

        // go to the future:
        Clock clock = Clock.offset(
                constClock, Duration.ofSeconds(10));
        System.out.println("Current millis: "
                + clock.millis());

        // revind back with negative value:
        clock = Clock.offset(clock, Duration.ofSeconds(-5));
        System.out.println("Current millis: "
                + clock.millis());

        // The duration 0 returns the same clock:
        clock = Clock.offset(constClock, Duration.ZERO);
        System.out.println("Current millis: "
                + clock.millis());
        System.out.println("Identical? "
                + (constClock == clock));

The above code produces the following output:

Current millis: 0
Current millis: 10000
Current millis: 5000
Current millis: 0
Identical? true


Share with the World!