A time-zone offset is the period of time that a time-zone differs from Greenwich/UTC.
This is usually a fixed number of hours and minutes.

Different parts of the world have different time-zone offsets.
The rules for how offsets vary by place and time of year are captured in the
ZoneId class.

For example, Paris is one hour ahead of Greenwich/UTC in winter and two hours
ahead in summer. The ZoneId instance for Paris will reference two
ZoneOffset instances - a +01:00 instance for winter,
and a +02:00 instance for summer.

In 2008, time-zone offsets around the world extended from -12:00 to +14:00.
To prevent any problems with that range being extended, yet still provide
validation, the range of offsets is restricted to -18:00 to 18:00 inclusive.

This class is designed for use with the ISO calendar system.
The fields of hours, minutes and seconds make assumptions that are valid for the
standard ISO definitions of those fields. This class may be used with other
calendar systems providing the definition of the time fields matches those
of the ISO calendar system.

Instances of ZoneOffset must be compared using equals(java.lang.Object).
Implementations may choose to cache certain common offsets, however
applications must not rely on such caching.

This is a value-based
class; use of identity-sensitive operations (including reference equality
(==), identity hash code, or synchronization) on instances of
ZoneOffset may have unpredictable results and should be avoided.
The equals method should be used for comparisons.

isSupported

This checks if this offset can be queried for the specified field.
If false, then calling the range and
get methods will throw an exception.

If the field is a ChronoField then the query is implemented here.
The OFFSET_SECONDS field returns true.
All other ChronoField instances will return false.

If the field is not a ChronoField, then the result of this method
is obtained by invoking TemporalField.isSupportedBy(TemporalAccessor)
passing this as the argument.
Whether the field is supported is determined by the field.

range

The range object expresses the minimum and maximum valid values for a field.
This offset is used to enhance the accuracy of the returned range.
If it is not possible to return the range, because the field is not supported
or for some other reason, an exception is thrown.

If the field is a ChronoField then the query is implemented here.
The supported fields will return
appropriate range instances.
All other ChronoField instances will throw an UnsupportedTemporalTypeException.

If the field is not a ChronoField, then the result of this method
is obtained by invoking TemporalField.rangeRefinedBy(TemporalAccessor)
passing this as the argument.
Whether the range can be obtained is determined by the field.

get

This queries this offset for the value for the specified field.
The returned value will always be within the valid range of values for the field.
If it is not possible to return the value, because the field is not supported
or for some other reason, an exception is thrown.

If the field is a ChronoField then the query is implemented here.
The OFFSET_SECONDS field returns the value of the offset.
All other ChronoField instances will throw an UnsupportedTemporalTypeException.

If the field is not a ChronoField, then the result of this method
is obtained by invoking TemporalField.getFrom(TemporalAccessor)
passing this as the argument. Whether the value can be obtained,
and what the value represents, is determined by the field.

getLong

This queries this offset for the value for the specified field.
If it is not possible to return the value, because the field is not supported
or for some other reason, an exception is thrown.

If the field is a ChronoField then the query is implemented here.
The OFFSET_SECONDS field returns the value of the offset.
All other ChronoField instances will throw an UnsupportedTemporalTypeException.

If the field is not a ChronoField, then the result of this method
is obtained by invoking TemporalField.getFrom(TemporalAccessor)
passing this as the argument. Whether the value can be obtained,
and what the value represents, is determined by the field.

query

This queries this offset using the specified query strategy object.
The TemporalQuery object defines the logic to be used to
obtain the result. Read the documentation of the query to understand
what the result of this method will be.