java8 - java.time.ZoneId class tutorials with examples
What is ZoneId in Java?
ZoneId
is an abstract class defined in java.time
package.
This is used to represent timezone
such as Asia/Calcutta
.
This provides rules for creating LocalDateTime
and Instant
objects.
Time in the earth or world is divided into regions. Whereas each part of the region is called a time zone.
Timezone
is an offset or number of hours difference from Standard time zone UTC - Coordinate Universal Time.
ZoneId class Syntax:
public abstract class ZoneId implements Serializable
How to create ZoneId Object?
It Provides the of()
method for creating the specific timezone.
This method takes a String of zone id that gets from the ZoneOffset
import java.time.ZoneId;
public class ZoneIdExample {
public static void main(String[] args) {
ZoneId zoneId1 = ZoneId.of("Asia/Calcutta");
ZoneId zoneId2 = ZoneId.of("Z"); // Z is an Zone id for UTC
ZoneId zoneId3 = ZoneId.of("-8"); // -08:00
System.out.println(zoneId1);
System.out.println(zoneId2);
System.out.println(zoneId3);
ZoneId zoneId4 = ZoneId.of("A");
System.out.println(zoneId4);
}
}
output:
Asia/Calcutta
Z
-08:00
Exception in thread "main" java.time.DateTimeException: Invalid ID for ZoneOffset, invalid format: A
at java.base/java.time.ZoneOffset.of(ZoneOffset.java:241)
at java.base/java.time.ZoneId.of(ZoneId.java:402)
at java.base/java.time.ZoneId.of(ZoneId.java:356)
at org.cloudhadoop.LocalDateTime.ConvertToDate.main(ConvertToDate.java:17)
of()
method takes the following things,
If the letter is Z, it takes Zone id as UTC, if you pass any letter other than Z, it throws ”Exception in thread “main” java.time.DateTimeException: Invalid ID for ZoneOffset“.
If it contains + or -, It considered as ZoneOffset
as a value.
If it contains a string - Asia/Calcutta, that string is considered as zone id
Java ZoneId methods and examples
There are two methods in ZoneId class.
- systemDefault() method: return current system default timezone - Asia/Calcutta
- getId() method return the id of Zone id.
- getDisplayName() method: return display name of the specific timezone using internalization
import java.time.ZoneId;
import java.time.format.TextStyle;
import java.util.Locale;
public class ZoneIdSystemDefaultExample {
public static void main(String[] args) {
ZoneId defaultZone= ZoneId.systemDefault();
System.out.println("Default System: "+defaultZone);
System.out.println("Default System getId : "+defaultZone.getId());
System.out.println("Default System Display Name : "+defaultZone.getDisplayName(TextStyle.FULL_STANDALONE, Locale.ENGLISH));
}
}
Output:
Default System: Asia/Calcutta
Default System getId : Asia/Calcutta
Default System Display Name : India Time
Methods
Method | Description |
---|---|
adjustInto(Temporal temporal) | adjust the Offset of the caller with the same offset of the parameter object |
from(TemporalAccessor temporal) | Return the offset instance from temporal instance |
getId() | Return the offset id ie Z |
get(TemporalField field) | Return the field from an offset as Int value |
getRules() | Return timezone rules |
systemDefault() | Return Default timezone id |
getLong() | Return the field from an offset as a Long value |
of(String offsetId) | It is used to create a ZoneOffset object with id |
ofHours(int hours) | It is used to create a ZoneOffset object with offset hours |
ofHoursMinutes(int offset Hours, int offsetMinutes) | It is used to create a ZoneOffset object with offset hours and minutes |
ofHoursMinutesSeconds(int hours, int minutes, int seconds) | It is used to create a ZoneOffset object with offset hours, minutes, and seconds |
ofTotalSeconds(int totalSeconds) | It is used to create a ZoneOffset object with total seconds |
range(TemporalField field) | It is used to the range of values using Temporal field |
How to get available all time zones in java?
ZoneId
class has static getAvailableZoneIds()
method - which return available timezone id strings
import java.time.ZoneId;
import java.util.Set;
public class ConvertToDate {
public static void main(String[] args) {
Set availableZones = ZoneId.getAvailableZoneIds();
availableZones.stream().forEach(System.out::println);
}
}
The output of the above code is
Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8
Africa/Nairobi
America/Marigot
Asia/Aqtau
Conclusion
Finally, In this tutorial, You learned java.time.ZoneId class in java8 and multiple examples using this class.