最近项目经常使用到JDK1.8中LocalDate LocalDateTime的时间转换问题,记录一下:
Date 转 LocalDate
Date date = new Date();
Instant instant = date.toInstant(); // 时间戳
ZoneId zoneId = ZoneId.systemDefault(); // 时区
ZonedDateTime zonedDateTime = instant.atZone(zoneId); // 特定时区对应的日期时间
LocalDate localDate = zonedDateTime.toLocalDate();
date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate 转 Date
LocalDate localDate = LocalDate.now();
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
Date date = Date.from(zdt.toInstant());
补充LocalDate用到的一些方法:
LocalDate firstLocalDate = localDate.with(TemporalAdjusters.firstDayOfMonth());// 获取月第一天
LocalDate lastLocalDate = localDate.with(TemporalAdjusters.lastDayOfMonth());// 获取月最后一天
long dateDiff = endLocalDate.toEpochDay() - startLocalDate.toEpochDay();// 获取两个日期相差天数
localDate.minusDays(1);//日期减一天
localDate.plusDays(1);//日期加一天
Date 转 LocalDateTime
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
LocalDateTime 转 Date
LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
Date date = Date.from(zdt.toInstant());
LocalDate LocalDateTime 和字符串时间转换
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.now();
String localDateStr = localDate.format(dtf1);
LocalDate localDate1 = LocalDate.parse("2020-07-20", dtf1);
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.now();
String localDateTimeStr = localDateTime.format(dtf2);
LocalDateTime localDateTime1 = localDateTime.parse("2020-07-20 20:30:00", dtf2);
补充:ChronoUnit类计算时间差
long day1= ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.of(2021, 4, 11));
long day2 = ChronoUnit.DAYS.between(LocalDateTime.now(), LocalDateTime.of(2021, 5, 10, 12, 00));
long min= ChronoUnit.MINUTES.between(LocalDateTime.now(), LocalDateTime.of(2021, 4, 10, 12, 00));
long seconds = ChronoUnit.SECONDS.between(LocalDateTime.now(), LocalDateTime.of(2021, 4, 10, 12, 00));