
在现代 Java 开发中,精确高效处理日期和时间是构建高质量应用关键。本文探讨 Java 8 新型日期时间 API,包括 DateTimeFormatter 格式化与解析、LocalDate 和 LocalDateTime 操作及 Duration 时间间隔计算。通过代码示例与场景分析,助读者掌握并应用于实际项目。

java.time.format.DateTimeFormatter是 Java 8 新增工具,用于日期时间对象与字符串转换。创建方式:解析日期时间字符串可用parse方法。日期部分:yyyy是年份,MM是月份,dd是日期,EEEE是星期全称。时间部分:HH是 24 小时制小时,hh是 12 小时制小时,mm是分钟,ss是秒,SSS是毫秒。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterExample {
public static void main(String[] args) {
// 创建一个日期对象
LocalDate date = LocalDate.of(2024, 1, 24);
// 创建一个日期格式器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 使用格式器将日期对象转换为字符串
String formattedDate = date.format(formatter);
System.out.println("Formatted Date: " + formattedDate); // 输出:2024-01-24
// 解析字符串为日期对象
LocalDate parsedDate = LocalDate.parse("2023-07-15", formatter);
System.out.println("Parsed Date: " + parsedDate); // 输出:2023-07-15
}
}LocalDate类是 Java 8 的java.time包下表示日期的类,不可变且线程安全,适用于仅处理日期场景。创建方式有:用now()获取当前日期;of()指定年、月、日创建;从符合 ISO-8601 标准的字符串解析。常用方法:获取日期各部分,如年份、月份等;比较和运算日期,可用equals()、isBefore()、isAfter()、plusDays()、minusMonths()等方法。
LocalDateTime在 Java 8 的java.time包中,表日期和时间,无时区概念,不可变且线程安全,适用于交易、系统日志等场景。创建方式有now()获取当前时间、of()指定创建、从字符串解析(先创建DateTimeFormatter再用parse())。常用方法有获取日期和时间各部分、用plus()和minus()系列方法调整、支持DateTimeFormatter格式化和解析。
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class LocalDateAndLocalDateTimeExample {
public static void main(String[] args) {
// 创建一个LocalDate对象
LocalDate date = LocalDate.of(2024, 1, 24);
// 创建一个LocalTime对象
LocalTime time = LocalTime.of(14, 30);
// 将LocalDate和LocalTime组合成LocalDateTime
LocalDateTime dateTime = LocalDateTime.of(date, time);
System.out.println("LocalDateTime: " + dateTime); // 输出:2024-01-24T14:30
// 获取当前日期和时间
LocalDateTime now = LocalDateTime.now();
System.out.println("Current LocalDateTime: " + now);
}
// 获取两个日期之间的天数差
public static long daysBetween(LocalDate startDate, LocalDate endDate) {
return ChronoUnit.DAYS.between(startDate, endDate);
}
}
// 使用示例:
long daysApart = daysBetween(LocalDate.of(2023, 1, 1), LocalDate.of(2023, 12, 31));
System.out.println("Days apart: " + daysApart);java.time.Duration类是 Java 8 引入,用于表示时间间隔,以秒和纳秒为基本单位,可处理从纳秒到天范围,对象不可变。创建方式有:用of系列静态方法,如ofSeconds等;用between方法获取两个时间对象持续时间;用parse方法解析符合 ISO 8601 标准格式字符串为Duration对象。
import java.time.Duration;
import java.time.LocalDateTime;
public class DurationExample {
public static void main(String[] args) {
// 获取两个LocalDateTime之间的时间差
LocalDateTime start = LocalDateTime.of(2024, 1, 1, 9, 0);
LocalDateTime end = LocalDateTime.of(2024, 1, 1, 11, 30);
// 计算两个日期时间之间的持续时间
Duration duration = Duration.between(start, end);
System.out.println("Duration: " + duration); // 输出:PT2H30M
// 获取总小时数
long hours = duration.toHours();
System.out.println("Hours: " + hours); // 输出:2
// 获取剩余的分钟数
int minutes = duration.toMinutes() % 60;
System.out.println("Minutes: " + minutes); // 输出:30
}
}DateTimeFormatter 用于日期和时间的字符串格式化与解析,应用于数据持久化、用户界面展示等。LocalDate 和 LocalDateTime 分别存储和操作日期及日期时间,适用于业务逻辑中的日期时间运算。Duration 专注于计算两个时间点间的时间间隔,在衡量任务执行时间、计费周期计算、计划调度等领域有用。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。