Java 时间类(中):JDK8 全新时间 API 详解
JDK8 引入的时间 API 彻底解决了旧版 Date/Calendar 的线程安全和易用性问题,是日常开发的首选。
JDK8 时间类整体架构
JDK8 基于 ISO 8601 标准重构了时间 API,将功能拆解得更加清晰。相比 JDK7 的 Date + SimpleDateFormat + Calendar,新 API 具备不可变对象、线程安全、语义化命名等核心优势。
| 类别 | 核心类 | 作用 |
|---|---|---|
| 时区 | ZoneId | 表示时区(如 Asia/Shanghai) |
| 时间戳 | Instant | 表示 UTC 标准时间戳 |
| 带时区时间 | ZonedDateTime | 带时区的完整时间 |
| 纯日期 | LocalDate | 仅包含年月日 |
| 纯时间 | LocalTime | 仅包含时分秒纳秒 |
| 日期 + 时间 | LocalDateTime | 包含年月日时分秒 |
| 格式化解析 | DateTimeFormatter | 替代 SimpleDateFormat |
| 时间间隔 | Period/Duration/ChronoUnit | 计算两个时间的间隔 |
ZoneId 时区类
处理跨时区业务的基础。它负责管理全球各个时区及其偏移量。
常用方法
ZoneId.systemDefault():获取系统默认时区。ZoneId.of(String zoneId):根据 ID 获取指定时区。ZoneId.getAvailableZoneIds():获取 Java 支持的所有时区 ID。
代码示例
import java.time.ZoneId;
import java.util.Set;
public class ZoneIdDemo {
public static void main(String[] args) {
// 1. 获取系统默认时区(国内通常是 Asia/Shanghai)
ZoneId defaultZone = ZoneId.systemDefault();
System.out.println("系统默认时区:" + defaultZone);
ZoneId.of();
ZoneId.of();
Set<String> allZones = ZoneId.getAvailableZoneIds();
System.out.println( + allZones.size());
}
}


