在现代 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 删除。