Time in Java

Our Java program demonstrates various operations with dates and times using the java.time package, which offers comprehensive support for handling time-related tasks.

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.isBefore(ZonedDateTime.now()));
        System.out.println(then.isAfter(ZonedDateTime.now()));
        System.out.println(then.isEqual(ZonedDateTime.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));
    }
}

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

This Java code demonstrates similar functionality to the original example:

  1. We use Instant.now() to get the current time.
  2. We create a specific date and time using ZonedDateTime.of().
  3. We extract various components of the date and time.
  4. We compare two times using isBefore(), isAfter(), and isEqual().
  5. We calculate the duration between two times using Duration.between().
  6. We perform arithmetic on times using plus() and minus().

The main differences are:

  • Java uses ZonedDateTime instead of a simple time struct.
  • Duration calculations are done using the Duration class.
  • Java’s time API is more object-oriented, with methods like toHours() instead of Hours().

This example showcases Java’s robust date and time handling capabilities, which are part of the java.time package introduced in Java 8.