
什么是Java中的ZoneId?
ZoneId 是定义在java.time 包中的一个抽象类。它用于表示timezone ,如 : Asia/Calcutta
这为创建LocalDateTime 和Instant 对象提供了规则。
地球或世界上的时间被划分为区域。而区域的每一部分都被称为时区。Timezone ,是与标准时区UTC--协调世界时相差的一个偏移或小时数。
ZoneId类句法
public abstract class ZoneId implements Serializable
如何创建ZoneId对象?
它提供了of() 方法来创建特定的时区。这个方法需要一个字符串的zone id,它从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);
}
}
输出:
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() 该方法需要以下东西, 如果字母是Z,它将Zone id作为UTC,如果你传递Z以外的任何字母,它会抛出 " Exception in thread "main" java.time.DateTimeException。ZoneOffset的ID无效"。如果它包含+或-,它被认为是ZoneOffset 作为一个值。如果它包含一个字符串--Asia/Calcutta,该字符串被认为是zone id。
Java ZoneId方法和例子
ZoneId类中有两个方法:
- systemDefault()方法:返回当前的系统默认时区--Asia/Calcutta。
- getId()方法:返回ZoneId的id。
- getDisplayName()方法:使用内部化返回特定时区的显示名称。
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));
}
}
输出:
Default System: Asia/Calcutta
Default System getId : Asia/Calcutta
Default System Display Name : India Time
方法
| 方法 | 说明 |
|---|---|
| adjustInto(Temporal temporal) | 用参数对象的相同偏移量来调整调用者的偏移量。 |
| from(TemporalAccessor temporal) | 从temporal实例中返回偏移量实例 |
| getId() | 返回偏移量ID,即Z |
| get(TemporalField field) | 从一个偏移量返回Int值的字段 |
| getRules() | 返回时区规则 |
| systemDefault() | 返回默认的时区ID |
| getLong() | 将偏移量的字段作为Long值返回 |
| of(String offsetId) | 用来创建一个有id的ZoneOffset对象 |
| ofHours(int hours) | 用于创建一个带有偏移小时的ZoneOffset对象。 |
| ofHoursMinutes(int offset Hours, int offsetMinutes) | 它用于创建一个带有偏移小时和分钟的ZoneOffset对象。 |
| ofHoursMinutesSeconds(int hours, int minutes, int seconds) | 它用于创建一个带有偏移小时、分钟和秒的ZoneOffset对象。 |
| ofTotalSeconds(int totalSeconds) | 它用于创建一个具有总秒数的ZoneOffset对象。 |
| range(TemporalField field) | 它用于使用Temporal字段的值的范围。 |
ZoneId 该类有静态方法--它返回可用的时区ID字符串
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);
}
}
上述代码的输出是
Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8
Africa/Nairobi
America/Marigot
Asia/Aqtau
总结
最后,在本教程中,你学到了java.time.ZoneId类在java8中的应用以及使用该类的多个例子。