Accessing Temporal Fields in an Instant
The Instant class provides the following selected methods to access temporal fields in an instance of the class:
int getNano()
long getEpochSecond()
Return the number of nanoseconds and the number of seconds represented by this instant from the start of the epoch, respectively. Note that the method names are without the s at the end.
int get(TemporalField field)
long getLong(TemporalField field)
The get(field) method will return the value of the specified field in this Instant as an int. Only the following ChronoField constants are supported: NANO_OF_SECOND, MICRO_OF_SECOND, MILLI_OF_SECOND, and INSTANT_SECONDS (p. 1046). The first three fields will always return a valid value, but the INSTANT_SECONDS field will throw a DateTimeException if the value does not fit into an int. All other fields result in an UnsupportedTemporalTypeException.
As the getLong(field) method returns the value of the specified field in this Instant as a long, there is no problem with overflow in returning a value designated by any of the four fields mentioned earlier.
boolean isSupported(TemporalField field)
The isSupported(field) determines whether the specified field is supported by this instant.
long toEpochMilli()
Returns the number of milliseconds that represent this Instant from the start of the epoch. The method throws an ArithmeticException in case of number overflow.
The code below shows how the getNano() and getEpochSecond() methods of the Instant class read the value of the nanosecond and the epoch-second fields of an Instant object, respectively.
Instant inst = Instant.ofEpochSecond(24L*60*60, // 1 day and
555_555_555L);// 555555555 ns after epoch.
out.println(inst); // 1970-01-02T00:00:00.555555555Z
out.println(inst.getNano()); // 555555555 ns
out.println(inst.getEpochSecond()); // 86400 s
Reading the nanosecond and epoch-second fields of an Instant in different units can be done using the get(field) method. Note the value of the nanosecond field expressed in different units using ChronoField constants. To avoid a DateTimeException when number overflow occurs, the getLong(field) method is used instead of the get(field) method in accessing the epoch-second field.
out.println(inst.get(ChronoField.NANO_OF_SECOND)); // 555555555 ns
out.println(inst.get(ChronoField.MICRO_OF_SECOND)); // 555555 micros
out.println(inst.get(ChronoField.MILLI_OF_SECOND)); // 555 ms
out.println(inst.getLong(ChronoField.INSTANT_SECONDS)); // 86400 s
//out.println(inst.get(ChronoField.INSTANT_SECONDS)); // DateTimeException
//out.println(inst.get(ChronoField.HOUR_OF_DAY)); // UnsupportedTemporal-
// TypeException
The Instant class provides the toEpochMilli() method to derive the position of the instant measured in milliseconds from the epoch; that is, the second and nanosecond fields are converted to milliseconds. Converting 1 day (86400 s) and 555555555 ns results in 86400555 ms.
out.println(inst.toEpochMilli()); // 86400555 ms