Time in CLIPS

Our Java program demonstrates various operations with dates and times using the java.time package. Here’s the full source code:

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 create a ZonedDateTime by providing the year, month, day, etc.
        // ZonedDateTime is always associated with a 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 day of week 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 instants.
        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 minus to move backwards by a duration.
        System.out.println(then.plus(diff));
        System.out.println(then.minus(diff));
    }
}

To run the program, compile it with javac TimeExample.java and then run it with java TimeExample.

This program demonstrates:

  1. Getting the current time using Instant.now().
  2. Creating a specific date and time with ZonedDateTime.of().
  3. Extracting components of a date/time (year, month, day, etc.).
  4. Comparing times using isBefore(), isAfter(), and equals().
  5. Calculating the duration between two times.
  6. Computing durations in various units (hours, minutes, seconds, nanoseconds).
  7. Adding to and subtracting from times using durations.

Note that Java’s java.time package provides a rich set of classes for working with dates, times, and durations. The Instant class represents a point on the time-line, while ZonedDateTime represents a date and time with a time zone. The Duration class is used for representing a span of time.

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