Time in Karel

Java offers extensive support for dates and times through the java.time package. 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 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:

  1. We start by getting the current time using Instant.now().

  2. We create a specific date and time using ZonedDateTime.of().

  3. We extract various components of the date and time (year, month, day, etc.).

  4. We demonstrate how to get the day of the week.

  5. We compare two times using isBefore(), isAfter(), and equals().

  6. We calculate the duration between two times using Duration.between().

  7. We show how to get the duration in different units (hours, minutes, seconds, nanoseconds).

  8. Finally, we demonstrate how to add or subtract a duration from a date/time.

To run this program, save it as TimeExample.java, compile it with javac TimeExample.java, and then run it with java TimeExample.

The output will vary depending on the current time when you run the program, but it will show the current time, the specified time (November 17, 2009), various time components, comparisons, and duration calculations.

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