Java日期时区
ZoneOffset表示与UTC时区偏移的固定区域。
ZoneOffset不跟踪由夏令时导致的区域偏移的更改。
ZoneOffset类声明三个常量:UTC
MAX
MIN
UTC是UTC的时区偏移常量。
MAX和MIN是最大和最小支持的区域偏移。
Z用作UtC时区的区域偏移指示符。
我们可以用小时,分钟和秒的组合创建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);
}
}
上面的代码生成以下结果。
例2
以下代码显示如何从偏移创建区域偏移。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);
}
}
上面的代码生成以下结果。
例3
以下代码从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);
}
}
上面的代码生成以下结果。
注意
Java Date-Time API支持以小时,分钟和秒为单位的区域偏移量。
来自ZoneOffset的compareTo()允许我们比较两个区域偏移。
+1:30的区域偏移在+1:00的区域偏移之前。
Java Date-Time API支持-18:00到+18:00之间的区域偏移。
ZoneId
ZoneId表示区域偏移及其用于更改区域偏移的规则夏令时。
ZoneOffset表示从UtC时区偏移的固定区域,而ZoneId表示可变区偏移。
这些更改是由时区规则定义的。
时区ID
每个时区都有一个ID,可以用三种格式定义:在区域偏移中,可以是“Z”,“+ hh:mm:ss”或“-hh:mm:ss”,例如“+01:00”。
前缀为“UTC”,“GMT”或“UT”,后跟区域偏移量,例如“UTC + 01:00”。
在区域名称中,例如,“美洲/芝加哥”。
以下代码显示如何使用of()工厂方法创建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);
}
}
上面的代码生成以下结果。
例4
ZoneId中的getAvailableZoneIds()返回所有已知时区ID。import java.time.ZoneId;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set zoneIds = ZoneId.getAvailableZoneIds();
for (String zoneId: zoneIds) {
System.out.println(zoneId);
}
}
}
上面的代码生成以下结果。
ZoneRules
ZoneRules跟踪区域偏移如何变化。
下面的代码显示了如何使用ZoneRules以获取有关ZoneId的时间偏移和时间更改的信息。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 transitions = rules.getTransitions();
System.out.println(transitions);
}
}
上面的代码生成以下结果。