java8引入了全新的日期和时间API,主要在java.time包中。
以下是关于如何使用这些功能的简要概述:
1. 表示日期和时间
LocalDate:表示没有时区的日期(年,月,日)
LocalDate today = LocalDate.now();
LocalDate specificDate = LocalDate.of(2024,9,24);
LocalTime:表示没有时区的时间(时,分,秒)
LocalTime now = LocalTime.now();
LocalTime specficTime = LocalTime.of(14,30,0);
LocalDateTime:表示日期和时间
LocalDateTime now = LocalDateTime.now();
LocalDateTime specificDateTime = LocalDateTime.of(2024,9,24,14,30);
ZonedDateTime:表示带时区的日期和时间
ZonedDateTime zonedNow = ZonedDateTime.now();
2. 格式化
使用DateTimeFormatter格式化日期和时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = LocalDateTime.now().format(formatter);
3. 设置和修改时间
修改日期和时间的方法通常以with或plus、minus开头
LocalDate nextWeek =today.plusWeeks(1);
LocalDate previousMonth = today.minusMonths(1);
LocalDateTime updatedDateTime = now.withHour(10),withMinute(0);
4. 时间段的计算
使用Duration和Period来计算时间段
Duration:用于表示时间间隔(例如,小时,分钟,秒)
Period:用于表示日期间隔(例如,年,月,日)
LocalDate startDate = LocalDate.of(2024,1,1);
LocalDate endDate = LocalDate.of(2024,12,31);
Period period = Period.butween(startDate,endDate);//计算日期间隔
LocalTime startTime = LocalTime.of(10,0);
LocalTime endTime = LocalTime.of(12,30);
Duration duration = Duration.between(startTime,endTime);// 计算时间间隔
5. 与 Date
/ Calendar
对象的转换
可以使用java.util.Date和java.util.Calendar进行转换
// Date 转换为LocalDate
Date dateObj = new Date();
LocalDate localDate = dateObj.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
// LocalDate 转换为 Date
Date convertedDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
// Canlendar 转换为LocalDate
Calendar calendar = Calendar.getstance();
LocalDate localDateFromCalendar = calendar.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
//LocalDate 转换为Calendar
Calender convertedCalendar = Calendar.getInstance();
convertedCalendar.setTime(Date.form(localDate.atStartOdDay(ZoneId.systemDefault()).toInstant()));
这个API提供了更简洁和更安全的日期时间操作方式,避免了旧版API的许多问题。