ZoneOffset
表示與UTC時(shí)區(qū)偏移的固定區(qū)域。
ZoneOffset
不跟蹤由夏令時(shí)導(dǎo)致的區(qū)域偏移的更改。
ZoneOffset類聲明三個(gè)常量:
UTC是UTC的時(shí)區(qū)偏移常量。
MAX和MIN是最大和最小支持的區(qū)域偏移。
Z用作UtC時(shí)區(qū)的區(qū)域偏移指示符。
我們可以用小時(shí),分鐘和秒的組合創(chuàng)建 ZoneOffset
。
import java.time.ZoneOffset; public class Main { public static void main(String[] args) { ZoneOffset zoneOffset1 = ZoneOffset.ofHours(-1); System.out.println(zoneOffset1); ZoneOffset zoneOffset2 = ZoneOffset.ofHoursMinutes(6, 30); System.out.println(zoneOffset2); ZoneOffset zoneOffset3 = ZoneOffset.ofHoursMinutesSeconds(9, 30, 45); System.out.println(zoneOffset3); } }
上面的代碼生成以下結(jié)果。
以下代碼顯示如何從偏移創(chuàng)建區(qū)域偏移。
import java.time.ZoneOffset; public class Main { public static void main(String[] args) { ZoneOffset zoneOffset1 = ZoneOffset.of("+05:00"); ZoneOffset zoneOffset2 = ZoneOffset.of("Z"); // Same as ZoneOffset.UTC System.out.println(zoneOffset1); System.out.println(zoneOffset2); } }
上面的代碼生成以下結(jié)果。
以下代碼從 ZoneOffset
輸出常量值。
import java.time.ZoneOffset; public class Main { public static void main(String[] args) { System.out.println("ZoneOffset.UTC: " + ZoneOffset.UTC); System.out.println("ZoneOffset.MIN: " + ZoneOffset.MIN); System.out.println("ZoneOffset.MAX: " + ZoneOffset.MAX); } }
上面的代碼生成以下結(jié)果。
Java Date-Time API支持以小時(shí),分鐘和秒為單位的區(qū)域偏移量。
來自ZoneOffset的compareTo()允許我們比較兩個(gè)區(qū)域偏移。
+1:30的區(qū)域偏移在+1:00的區(qū)域偏移之前。
Java Date-Time API支持-18:00到+18:00之間的區(qū)域偏移。
ZoneId
表示區(qū)域偏移及其用于更改區(qū)域偏移的規(guī)則夏令時(shí)。
ZoneOffset
表示從UtC時(shí)區(qū)偏移的固定區(qū)域,而 ZoneId
表示可變區(qū)偏移。
這些更改是由時(shí)區(qū)規(guī)則定義的。
每個(gè)時(shí)區(qū)都有一個(gè)ID,可以用三種格式定義:
以下代碼顯示如何使用of()工廠方法創(chuàng)建ZoneId。
import java.time.ZoneId; public class Main { public static void main(String[] args) { ZoneId usChicago = ZoneId.of("America/Chicago"); System.out.println(usChicago); ZoneId fixedZoneId = ZoneId.of("+01:00"); System.out.println(fixedZoneId); } }
上面的代碼生成以下結(jié)果。
ZoneId
中的 getAvailableZoneIds()
返回所有已知時(shí)區(qū)ID。
import java.time.ZoneId; import java.util.Set; public class Main { public static void main(String[] args) { Set<String> zoneIds = ZoneId.getAvailableZoneIds(); for (String zoneId: zoneIds) { System.out.println(zoneId); } } }
上面的代碼生成以下結(jié)果。
ZoneRules
跟蹤區(qū)域偏移如何變化。
下面的代碼顯示了如何使用 ZoneRules
以獲取有關(guān)ZoneId的時(shí)間偏移和時(shí)間更改的信息。
import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.zone.ZoneOffsetTransition; import java.time.zone.ZoneRules; import java.util.List; public class Main { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); ZoneId usChicago = ZoneId.of("America/Chicago"); System.out.println("Zone ID: " + usChicago.getId()); ZoneRules rules = usChicago.getRules(); System.out.println("isFixedOffset(): " + rules.isFixedOffset()); ZoneOffset offset = rules.getOffset(now); System.out.println("Zone offset: " + offset); List<ZoneOffsetTransition> transitions = rules.getTransitions(); System.out.println(transitions); } }
上面的代碼生成以下結(jié)果。
更多建議: