## Java `java.time` 包常用类与方法整理表 *(Java 8+ 日期时间 API)* ### 核心类概览 | **类名** | **描述** | **主要用途** | | ------------------- | -------------------- | ---------------------------------- | | `LocalDate` | 日期 (年-月-日) | 生日、纪念日等不含时间的日期 | | `LocalTime` | 时间 (时-分-秒-纳秒) | 上课时间、会议时间等不含日期的时间 | | `LocalDateTime` | 日期 + 时间 | 本地日程安排 | | `ZonedDateTime` | 带时区的日期时间 | 跨国会议、航班时刻 | | `Instant` | 时间戳 (Unix 时间) | 日志记录、时间戳存储 | | `Duration` | 时间量 (秒/纳秒) | 计算时间间隔 (精确到纳秒) | | `Period` | 日期量 (年-月-日) | 计算日期间隔 (如年龄计算) | | `DateTimeFormatter` | 日期格式化 | 日期字符串解析与格式化 | --- #### LocalDate (日期操作) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ----------------- | -------------------------------- | ------------ | ------------------ | --------------------------------------- | | `now()` | `()` | `LocalDate` | 获取当前日期 | `LocalDate.now()` | | `of()` | `(int year, int month, int day)` | `LocalDate` | 创建指定日期 | `LocalDate.of(2023, 12, 25)` | | `parse()` | `(CharSequence text)` | `LocalDate` | 解析标准格式字符串 | `LocalDate.parse("2023-12-25")` | | `getYear()` | `()` | `int` | 获取年份 | `.getYear()` → `2023` | | `getMonth()` | `()` | `Month` | 获取月份枚举 | `.getMonth()` → `Month.DECEMBER` | | `getMonthValue()` | `()` | `int` | 获取月份数值 | `.getMonthValue()` → `12` | | `getDayOfMonth()` | `()` | `int` | 获取月中天数 | `.getDayOfMonth()` → `25` | | `getDayOfWeek()` | `()` | `DayOfWeek` | 获取星期 | `.getDayOfWeek()` → `DayOfWeek.MONDAY` | | `plusDays()` | `(long days)` | `LocalDate` | 添加天数 | `.plusDays(7)` → `2024-01-01` | | `minusMonths()` | `(long months)` | `LocalDate` | 减少月数 | `.minusMonths(1)` → `2023-11-25` | | `isAfter()` | `(ChronoLocalDate other)` | `boolean` | 是否在指定日期后 | `.isAfter(LocalDate.now())` | | `isBefore()` | `(ChronoLocalDate other)` | `boolean` | 是否在指定日期前 | `.isBefore(LocalDate.now())` | | `withYear()` | `(int year)` | `LocalDate` | 修改年份 | `.withYear(2024)` → `2024-12-25` | | `format()` | `(DateTimeFormatter formatter)` | `String` | 格式化输出 | `.format(DateTimeFormatter.ISO_DATE)` | --- #### LocalTime (时间操作) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ---------------- | ------------------------ | ------------ | ---------------- | --------------------------------------------- | | `now()` | `()` | `LocalTime` | 获取当前时间 | `LocalTime.now()` → `14:30:45.123` | | `of()` | `(int hour, int minute)` | `LocalTime` | 创建指定时间 | `LocalTime.of(9, 30)` | | `parse()` | `(CharSequence text)` | `LocalTime` | 解析时间字符串 | `LocalTime.parse("09:30:00")` | | `getHour()` | `()` | `int` | 获取小时 | `.getHour()` → `9` | | `getMinute()` | `()` | `int` | 获取分钟 | `.getMinute()` → `30` | | `getSecond()` | `()` | `int` | 获取秒数 | `.getSecond()` → `0` | | `plusHours()` | `(long hours)` | `LocalTime` | 添加小时 | `.plusHours(2)` → `11:30` | | `minusMinutes()` | `(long minutes)` | `LocalTime` | 减少分钟 | `.minusMinutes(15)` → `09:15` | | `isBefore()` | `(LocalTime other)` | `boolean` | 是否在指定时间前 | `.isBefore(LocalTime.NOON)` | | `truncatedTo()` | `(ChronoUnit unit)` | `LocalTime` | 截断时间精度 | `.truncatedTo(ChronoUnit.MINUTES)` → `09:30` | --- #### LocalDateTime (日期时间操作) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | --------------- | ---------------------------------- | --------------- | ------------ | ------------------------------------- | | `now()` | `()` | `LocalDateTime` | 当前日期时间 | `LocalDateTime.now()` | | `of()` | `(LocalDate date, LocalTime time)` | `LocalDateTime` | 组合日期时间 | `LocalDateTime.of(date, time)` | | `toLocalDate()` | `()` | `LocalDate` | 获取日期部分 | `.toLocalDate()` | | `toLocalTime()` | `()` | `LocalTime` | 获取时间部分 | `.toLocalTime()` | | `atZone()` | `(ZoneId zone)` | `ZonedDateTime` | 添加时区 | `.atZone(ZoneId.of("Asia/Shanghai"))` | --- #### ZonedDateTime (时区时间) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ----------------------- | --------------- | --------------- | -------------------- | -------------------------------------------------- | | `now()` | `(ZoneId zone)` | `ZonedDateTime` | 获取指定时区当前时间 | `ZonedDateTime.now(ZoneId.of("America/New_York"))` | | `withZoneSameInstant()` | `(ZoneId zone)` | `ZonedDateTime` | 转换为另一时区 | `.withZoneSameInstant(ZoneOffset.UTC)` | | `getOffset()` | `()` | `ZoneOffset` | 获取时区偏移 | `.getOffset()` → `+08:00` | --- #### Instant/Duration/Period (时间计算) | **类型** | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ---------- | ---------------- | ---------------------------------- | ------------ | -------------- | -------------------------------------- | | `Instant` | `now()` | `()` | `Instant` | 当前时间戳 | `Instant.now()` | | | `ofEpochMilli()` | `(long epochMilli)` | `Instant` | 从毫秒创建 | `Instant.ofEpochMilli(1700000000000L)` | | | `toEpochMilli()` | `()` | `long` | 转为毫秒时间戳 | `instant.toEpochMilli()` | | `Duration` | `between()` | `(Temporal start, Temporal end)` | `Duration` | 计算时间间隔 | `Duration.between(startTime, endTime)` | | | `toHours()` | `()` | `long` | 转为小时数 | `duration.toHours()` | | | `plusMinutes()` | `(long minutes)` | `Duration` | 添加分钟 | `duration.plusMinutes(30)` | | `Period` | `between()` | `(LocalDate start, LocalDate end)` | `Period` | 计算日期间隔 | `Period.between(birthDate, today)` | | | `getYears()` | `()` | `int` | 获取间隔年数 | `period.getYears()` | | | `withDays()` | `(int days)` | `Period` | 修改天数 | `period.withDays(10)` | --- #### DateTimeFormatter (格式化解析) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ------------- | ----------------------------- | ------------------- | -------------- | ------------------------------------------------- | | `ofPattern()` | `(String pattern)` | `DateTimeFormatter` | 创建格式化器 | `DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm")` | | `format()` | `(TemporalAccessor temporal)` | `String` | 格式化为字符串 | `formatter.format(LocalDateTime.now())` | | `parse()` | `(CharSequence text)` | `Temporal` | 解析字符串 | `formatter.parse("2023/12/25 09:30")` | --- ## 实用操作示例 ### 1. 日期计算 ```java // 计算90天后的日期 LocalDate futureDate = LocalDate.now().plusDays(90); // 计算两个日期之间有多少天 long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); ``` ### 2. 时区转换 ```java // 纽约时间转北京时间 ZonedDateTime newYorkTime = ZonedDateTime.now(ZoneId.of("America/New_York")); ZonedDateTime beijingTime = newYorkTime.withZoneSameInstant(ZoneId.of("Asia/Shanghai")); ``` ### 3. 格式转换 ```java // 自定义格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); String formattedDate = LocalDate.now().format(formatter); // 解析字符串 LocalDateTime dt = LocalDateTime.parse("2023-12-25T08:30:00"); ``` ### 4. 时间点操作 ```java // 获取今日零点 LocalDateTime todayStart = LocalDate.now().atStartOfDay(); // 计算程序执行时间 Instant start = Instant.now(); // ...执行代码... Duration elapsed = Duration.between(start, Instant.now()); System.out.println("耗时:" + elapsed.toMillis() + "ms"); ``` --- ## 新旧API对比优势 | **特性** | **旧Date/Calendar** | **java.time API** | | ------------ | -------------------------- | ------------------------------- | | **线程安全** | ❌ 可变对象 | ✅ 不可变对象 | | **API设计** | 混乱(35个方法弃用) | 模块化直观设计 | | **时区处理** | 依赖TimeZone | 内置ZoneId支持 | | **操作精度** | 毫秒级 | 纳秒级 | | **链式调用** | 不支持 | ✅ 流畅API | | **日期计算** | 复杂(需Calendar) | `.plusDays()`/`minusMonths()`等 | | **格式化** | SimpleDateFormat线程不安全 | DateTimeFormatter线程安全 | Loading... ## Java `java.time` 包常用类与方法整理表 *(Java 8+ 日期时间 API)* ### 核心类概览 | **类名** | **描述** | **主要用途** | | ------------------- | -------------------- | ---------------------------------- | | `LocalDate` | 日期 (年-月-日) | 生日、纪念日等不含时间的日期 | | `LocalTime` | 时间 (时-分-秒-纳秒) | 上课时间、会议时间等不含日期的时间 | | `LocalDateTime` | 日期 + 时间 | 本地日程安排 | | `ZonedDateTime` | 带时区的日期时间 | 跨国会议、航班时刻 | | `Instant` | 时间戳 (Unix 时间) | 日志记录、时间戳存储 | | `Duration` | 时间量 (秒/纳秒) | 计算时间间隔 (精确到纳秒) | | `Period` | 日期量 (年-月-日) | 计算日期间隔 (如年龄计算) | | `DateTimeFormatter` | 日期格式化 | 日期字符串解析与格式化 | --- #### LocalDate (日期操作) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ----------------- | -------------------------------- | ------------ | ------------------ | --------------------------------------- | | `now()` | `()` | `LocalDate` | 获取当前日期 | `LocalDate.now()` | | `of()` | `(int year, int month, int day)` | `LocalDate` | 创建指定日期 | `LocalDate.of(2023, 12, 25)` | | `parse()` | `(CharSequence text)` | `LocalDate` | 解析标准格式字符串 | `LocalDate.parse("2023-12-25")` | | `getYear()` | `()` | `int` | 获取年份 | `.getYear()` → `2023` | | `getMonth()` | `()` | `Month` | 获取月份枚举 | `.getMonth()` → `Month.DECEMBER` | | `getMonthValue()` | `()` | `int` | 获取月份数值 | `.getMonthValue()` → `12` | | `getDayOfMonth()` | `()` | `int` | 获取月中天数 | `.getDayOfMonth()` → `25` | | `getDayOfWeek()` | `()` | `DayOfWeek` | 获取星期 | `.getDayOfWeek()` → `DayOfWeek.MONDAY` | | `plusDays()` | `(long days)` | `LocalDate` | 添加天数 | `.plusDays(7)` → `2024-01-01` | | `minusMonths()` | `(long months)` | `LocalDate` | 减少月数 | `.minusMonths(1)` → `2023-11-25` | | `isAfter()` | `(ChronoLocalDate other)` | `boolean` | 是否在指定日期后 | `.isAfter(LocalDate.now())` | | `isBefore()` | `(ChronoLocalDate other)` | `boolean` | 是否在指定日期前 | `.isBefore(LocalDate.now())` | | `withYear()` | `(int year)` | `LocalDate` | 修改年份 | `.withYear(2024)` → `2024-12-25` | | `format()` | `(DateTimeFormatter formatter)` | `String` | 格式化输出 | `.format(DateTimeFormatter.ISO_DATE)` | --- #### LocalTime (时间操作) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ---------------- | ------------------------ | ------------ | ---------------- | --------------------------------------------- | | `now()` | `()` | `LocalTime` | 获取当前时间 | `LocalTime.now()` → `14:30:45.123` | | `of()` | `(int hour, int minute)` | `LocalTime` | 创建指定时间 | `LocalTime.of(9, 30)` | | `parse()` | `(CharSequence text)` | `LocalTime` | 解析时间字符串 | `LocalTime.parse("09:30:00")` | | `getHour()` | `()` | `int` | 获取小时 | `.getHour()` → `9` | | `getMinute()` | `()` | `int` | 获取分钟 | `.getMinute()` → `30` | | `getSecond()` | `()` | `int` | 获取秒数 | `.getSecond()` → `0` | | `plusHours()` | `(long hours)` | `LocalTime` | 添加小时 | `.plusHours(2)` → `11:30` | | `minusMinutes()` | `(long minutes)` | `LocalTime` | 减少分钟 | `.minusMinutes(15)` → `09:15` | | `isBefore()` | `(LocalTime other)` | `boolean` | 是否在指定时间前 | `.isBefore(LocalTime.NOON)` | | `truncatedTo()` | `(ChronoUnit unit)` | `LocalTime` | 截断时间精度 | `.truncatedTo(ChronoUnit.MINUTES)` → `09:30` | --- #### LocalDateTime (日期时间操作) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | --------------- | ---------------------------------- | --------------- | ------------ | ------------------------------------- | | `now()` | `()` | `LocalDateTime` | 当前日期时间 | `LocalDateTime.now()` | | `of()` | `(LocalDate date, LocalTime time)` | `LocalDateTime` | 组合日期时间 | `LocalDateTime.of(date, time)` | | `toLocalDate()` | `()` | `LocalDate` | 获取日期部分 | `.toLocalDate()` | | `toLocalTime()` | `()` | `LocalTime` | 获取时间部分 | `.toLocalTime()` | | `atZone()` | `(ZoneId zone)` | `ZonedDateTime` | 添加时区 | `.atZone(ZoneId.of("Asia/Shanghai"))` | --- #### ZonedDateTime (时区时间) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ----------------------- | --------------- | --------------- | -------------------- | -------------------------------------------------- | | `now()` | `(ZoneId zone)` | `ZonedDateTime` | 获取指定时区当前时间 | `ZonedDateTime.now(ZoneId.of("America/New_York"))` | | `withZoneSameInstant()` | `(ZoneId zone)` | `ZonedDateTime` | 转换为另一时区 | `.withZoneSameInstant(ZoneOffset.UTC)` | | `getOffset()` | `()` | `ZoneOffset` | 获取时区偏移 | `.getOffset()` → `+08:00` | --- #### Instant/Duration/Period (时间计算) | **类型** | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ---------- | ---------------- | ---------------------------------- | ------------ | -------------- | -------------------------------------- | | `Instant` | `now()` | `()` | `Instant` | 当前时间戳 | `Instant.now()` | | | `ofEpochMilli()` | `(long epochMilli)` | `Instant` | 从毫秒创建 | `Instant.ofEpochMilli(1700000000000L)` | | | `toEpochMilli()` | `()` | `long` | 转为毫秒时间戳 | `instant.toEpochMilli()` | | `Duration` | `between()` | `(Temporal start, Temporal end)` | `Duration` | 计算时间间隔 | `Duration.between(startTime, endTime)` | | | `toHours()` | `()` | `long` | 转为小时数 | `duration.toHours()` | | | `plusMinutes()` | `(long minutes)` | `Duration` | 添加分钟 | `duration.plusMinutes(30)` | | `Period` | `between()` | `(LocalDate start, LocalDate end)` | `Period` | 计算日期间隔 | `Period.between(birthDate, today)` | | | `getYears()` | `()` | `int` | 获取间隔年数 | `period.getYears()` | | | `withDays()` | `(int days)` | `Period` | 修改天数 | `period.withDays(10)` | --- #### DateTimeFormatter (格式化解析) | **方法** | **参数** | **返回类型** | **功能描述** | **示例** | | ------------- | ----------------------------- | ------------------- | -------------- | ------------------------------------------------- | | `ofPattern()` | `(String pattern)` | `DateTimeFormatter` | 创建格式化器 | `DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm")` | | `format()` | `(TemporalAccessor temporal)` | `String` | 格式化为字符串 | `formatter.format(LocalDateTime.now())` | | `parse()` | `(CharSequence text)` | `Temporal` | 解析字符串 | `formatter.parse("2023/12/25 09:30")` | --- ## 实用操作示例 ### 1. 日期计算 ```java // 计算90天后的日期 LocalDate futureDate = LocalDate.now().plusDays(90); // 计算两个日期之间有多少天 long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); ``` ### 2. 时区转换 ```java // 纽约时间转北京时间 ZonedDateTime newYorkTime = ZonedDateTime.now(ZoneId.of("America/New_York")); ZonedDateTime beijingTime = newYorkTime.withZoneSameInstant(ZoneId.of("Asia/Shanghai")); ``` ### 3. 格式转换 ```java // 自定义格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); String formattedDate = LocalDate.now().format(formatter); // 解析字符串 LocalDateTime dt = LocalDateTime.parse("2023-12-25T08:30:00"); ``` ### 4. 时间点操作 ```java // 获取今日零点 LocalDateTime todayStart = LocalDate.now().atStartOfDay(); // 计算程序执行时间 Instant start = Instant.now(); // ...执行代码... Duration elapsed = Duration.between(start, Instant.now()); System.out.println("耗时:" + elapsed.toMillis() + "ms"); ``` --- ## 新旧API对比优势 | **特性** | **旧Date/Calendar** | **java.time API** | | ------------ | -------------------------- | ------------------------------- | | **线程安全** | ❌ 可变对象 | ✅ 不可变对象 | | **API设计** | 混乱(35个方法弃用) | 模块化直观设计 | | **时区处理** | 依赖TimeZone | 内置ZoneId支持 | | **操作精度** | 毫秒级 | 纳秒级 | | **链式调用** | 不支持 | ✅ 流畅API | | **日期计算** | 复杂(需Calendar) | `.plusDays()`/`minusMonths()`等 | | **格式化** | SimpleDateFormat线程不安全 | DateTimeFormatter线程安全 | 最后修改:2025 年 10 月 13 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 👆请简单粗暴地爱我。