Time in Mercury

Java offers extensive support for times and durations; here are some examples.

import java.time.*;
import java.time.temporal.ChronoUnit;

public class TimeExample {
    public static void main(String[] args) {
        // We'll start by getting the current time.
        Instant now = Instant.now();
        System.out.println(now);

        // You can build a ZonedDateTime by providing the year, month, day, etc.
        // Times are always associated with a ZoneId, i.e. time zone.
        ZonedDateTime then = ZonedDateTime.of(2009, 11, 17, 20, 34, 58, 651387237, ZoneId.of("UTC"));
        System.out.println(then);

        // You can extract the various components of the time value as expected.
        System.out.println(then.getYear());
        System.out.println(then.getMonth());
        System.out.println(then.getDayOfMonth());
        System.out.println(then.getHour());
        System.out.println(then.getMinute());
        System.out.println(then.getSecond());
        System.out.println(then.getNano());
        System.out.println(then.getZone());

        // The Monday-Sunday DayOfWeek is also available.
        System.out.println(then.getDayOfWeek());

        // These methods compare two times, testing if the
        // first occurs before, after, or at the same time
        // as the second, respectively.
        System.out.println(then.toInstant().isBefore(now));
        System.out.println(then.toInstant().isAfter(now));
        System.out.println(then.toInstant().equals(now));

        // The Duration class represents the interval between two times.
        Duration diff = Duration.between(then.toInstant(), now);
        System.out.println(diff);

        // We can compute the length of the duration in various units.
        System.out.println(diff.toHours());
        System.out.println(diff.toMinutes());
        System.out.println(diff.getSeconds());
        System.out.println(diff.toNanos());

        // You can use plus to advance a time by a given duration,
        // or with a minus to move backwards by a duration.
        System.out.println(then.plus(diff));
        System.out.println(then.minus(diff));
    }
}

This Java code demonstrates various operations with dates and times using the java.time package, which was introduced in Java 8.

We start by getting the current time using Instant.now(). Then we create a specific date and time using ZonedDateTime.of().

We can extract various components of a ZonedDateTime such as year, month, day, hour, etc.

The code shows how to compare two time instants using isBefore(), isAfter(), and equals() methods.

We calculate the duration between two time instants using Duration.between(). The Duration class allows us to get the length of the duration in various units like hours, minutes, seconds, and nanoseconds.

Finally, we demonstrate how to add or subtract a duration from a ZonedDateTime.

To run this program, save it as TimeExample.java and use the following commands:

$ javac TimeExample.java
$ java TimeExample

The output will show the current time, the specified time, various components of the time, comparisons between times, the duration between times, and the results of adding and subtracting durations.

Next, we’ll look at the related idea of time relative to the Unix epoch.