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

1,101 阅读2分钟

ZoneId是一个定义在java.time包中的抽象类。它用于表示亚洲/卡尔卡塔的时区标识。这为创建LocalDateTime和Instant对象提供了规则。地球或世界上的时间被划分为时区。每个部分的区域被称为时区。时区是与标准时区UTC--协调世界时的偏移量或时差数。

语法

public abstract class ZoneId implements Serializable 

Zone Id对象的创建 它提供了of()方法来创建特定的区域。该方法接收从ZoneOffset中得到的区域ID字符串。

 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,该字符串将被视为区域ID。

方法使用实例

systemDefault() 方法返回当前系统默认的时区 - Asia/CalcuttagetId() 方法返回Zone id的id
getDisplayName() 方法- 使用内部化返回特定时区的显示名称

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类有静态的getAvailableZoneIds()方法--它返回可用的时区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  
.......