java8 - java.time.ZoneId类教程与实例

951 阅读2分钟

java8 - java.time.ZoneId class tutorials with examples

什么是Java中的ZoneId?

ZoneId 是定义在java.time 包中的一个抽象类。它用于表示timezone ,如 : Asia/Calcutta

这为创建LocalDateTimeInstant 对象提供了规则。

地球或世界上的时间被划分为区域。而区域的每一部分都被称为时区。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中的应用以及使用该类的多个例子。