前言
LocalDate、LocalTime、LocalDateTime这三个类是java8新提供的时间操作类
- LocalDate: 主管yyyy-MM-dd这种形式,也就是只管:年-月-日
- LocalTime: 主管HH:mm:ss这种形式,也就是只管:时:分:秒
- LocalDateTime: yyyy-MM-dd HH:mm:ss 这种形式,也就是只管: 年-月-日 时:分:秒
案例
获取现在的时间对象:
static void testNow() {
System.out.println(LocalDate.now());
System.out.println(LocalTime.now());
System.out.println(LocalDateTime.now());
}
使用of来具体定制时间
static void testOf() {
System.out.println(LocalDate.of(2015, 12, 20));
System.out.println(LocalTime.of(15, 36, 48));
System.out.println(LocalDateTime.of(2013, 9, 21, 5, 58, 24));
}
各种条件的定位时间
凡是LocalDate各种操作之后,他都返回一个新的LocalDate对象,所以,你要接着这个新对象啊,你要是不用对象接着,那么就会看到不起作用,这样子好链式编程
static void testWith() {
LocalDate localDate = LocalDate.of(2022, 10, 27);
// 获取本月的第一天
System.out.println("本月第一天:" + localDate.with(TemporalAdjusters.firstDayOfMonth()));
// 获取本月的最后一天
System.out.println("本月最后一天:" + localDate.with(TemporalAdjusters.lastDayOfMonth()));
// 本年第一天
System.out.println("本年第一天: " + localDate.with(TemporalAdjusters.firstDayOfYear()));
// 本年最后一天
System.out.println("本年最后一天: " + localDate.with(TemporalAdjusters.lastDayOfYear()));
// 下一个周几的操作
System.out.println("上周四: " + localDate.with(TemporalAdjusters.previous(DayOfWeek.THURSDAY)));
System.out.println("下周四: " + localDate.with(TemporalAdjusters.next(DayOfWeek.THURSDAY)));
// 本月第二周的周五
System.out.println("本月第二周的周五: " + localDate.with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY)));
// 下一个月的第一天
System.out.println("下一个月的第一天: " + localDate.with(TemporalAdjusters.firstDayOfNextMonth()));
// 加一天
System.out.println("加一天: " + localDate.plusDays(1));
// 加一周
System.out.println("加一周: " + localDate.plusWeeks(1));
// 加一个月
System.out.println("加一个月: " + localDate.plusMonths(1));
}
with()方法:返回此日期的调整副本
TemporalAdjuster: 时间调节器,将一个时间调节成另外一个时间
同理,LocalTime和LocalDateTime也可以按照上面的方法来加减小时,分钟,秒等操作
时间的比较
这个之前比较时间都是getTime然后比较一下就行,现在LocalDate、LocalTime、LocalDateTime提供了isBefore、isAfter方法
static void testCompare() {
LocalDate first = LocalDate.now();
LocalDate second = LocalDate.of(2015, 12, 25);
System.out.println(first.isBefore(second));
System.out.println(first.isAfter(second));
}
Date 和 LocalDateTime相互转换
public static void main(String[] args) {
System.out.println(dateToLocalDateTime(new Date()));
System.out.println(localDateTimeToDate(LocalDateTime.now()));
}
//java.util.Date类型转LocalDateTime
public static LocalDateTime dateToLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
return instant.atZone(zoneId).toLocalDateTime();
}
//java.time.LocalDateTime转java.util.Date
public static Date localDateTimeToDate(LocalDateTime localDateTime) {
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
return Date.from(zdt.toInstant());
}
有了LocalDateTime,你就可以操作获取LocalDate、LocalTime了,当然也就有转Date<–>LocalDate Date<–>LocalTime的操作