在 Java 中,ZoneId 和 ZonedDateTime 是处理时区和带时区日期时间的重要类,它们属于 java.time 包,这个包是在 Java 8 中引入的,用于替代旧的日期和时间 API(java.util.Date、java.util.Calendar 等)。
1、ZoneId 时区
ZoneId 类表示时区信息,例如 "UTC"、"Asia/Shanghai"、"America/New_York" 等。它提供了获取时区偏移量、时区规则以及验证时区 ID 的方法。
ZoneId 时区的常用方法:
方法 | 说明 |
---|---|
public static ZoneId systemDefault() | 获取当前系统默认的时区。 |
public static Set<String> getAvailableZoneIds() | 获取Java中支持的所有时区。 |
public static ZoneId of(String zoneId) | 获取一个指定的时区。 |
public abstract ZoneRules getRules() | 获取该时区的时区规则。 |
【示例】使用 ZoneId 时区。
import java.time.ZoneId;
/**
* 使用 ZoneId 时区
*/
@Test
public void testZoneId()
{
// 1、获取当前系统默认的时区
ZoneId zoneId = ZoneId.systemDefault();
System.out.println("当前系统的默认时区:" + zoneId.getId());
// 2、获取Java支持的全部时区ID
Set<String> zoneIdSet = ZoneId.getAvailableZoneIds();
System.out.println("Java支持的全部时区:" + zoneIdSet);
// 3、获取美国纽约市的时区ID
ZoneId zoneNewYork = ZoneId.of("America/New_York");
System.out.println("美国纽约市的时区:" + zoneNewYork.getId());
}
执行结果:
2、ZonedDateTime 带时区的时间
ZonedDateTime 类表示带时区信息的日期和时间。它包含了日期、时间和时区信息,可以用于表示某个具体时区下的时间点。
ZonedDateTime 的常用方法:
方法 | 说明 |
---|---|
public static ZonedDateTime now() | 获取当前系统带时区的时间。 |
public static ZonedDateTime now(ZoneId zone) | 获取指定的时区的时间。 |
public ZonedDateTime withZoneSameInstant(ZoneId zone) | 更改时区,保持瞬间(时间点)不变。 |
public static ZonedDateTime of(LocalDateTime localDateTime, ZoneId zone) | 根据 LocalDateTime 和 ZoneId 创建 ZonedDateTime 实例。 |
public ZoneId getZone() | 获取时区信息。 |
【示例】使用 ZonedDateTime 带时区的时间。
/**
* 使用 ZonedDateTime 带时区的时间
*/
@Test
public void testZonedDateTime()
{
// 1、获取当前系统带时区的时间
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("当前系统带时区的时间:" + zonedDateTime);
// 2、获取美国纽约市时间对象
ZoneId zoneNewYork = ZoneId.of("America/New_York"); //设置时区ID
ZonedDateTime zonedDateTimeNewYork = ZonedDateTime.now(zoneNewYork);
System.out.println("美国纽约市当前时间:" + zonedDateTimeNewYork);
// 3、获取世界标准时间
ZonedDateTime zebraTime = ZonedDateTime.now(Clock.systemUTC());
System.out.println("世界标准时间:" + zebraTime);
}
执行结果: