一、LocalDate转LocalDateTime类型
在Java 8中,LocalDate类型只持有日期信息,而不含有时间信息。如果想将LocalDate类型转换为LocalDateTime类型,则需要使用atStartOfDay()方法来将时间设定为00:00。
LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = localDate.atStartOfDay();
在上面的示例中,我们首先使用now()方法获取当前日期,然后使用atStartOfDay()方法将时间设定为00:00:00。
如果想将日期转换为指定时间的LocalDateTime类型,则可以使用of()方法设置时间:
LocalDate localDate = LocalDate.of(2021, 10, 1); LocalDateTime localDateTime = localDate.atTime(8, 30);
在上面的示例中,我们定义了一个LocalDate对象,表示2021年10月1日。接着,使用atTime()方法将时间设定为8:30。
二、LocalTime转Date
如果想将LocalTime类型转换为Date类型,我们需要先将LocalTime与LocalDate合并成LocalDateTime,再将LocalDateTime转换为Date:
LocalTime localTime = LocalTime.now(); LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime); Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
在上面的示例中,我们使用now()方法获取当前时间,再利用同样方法获取当前日期。之后,使用of()方法将当前时间和日期合并成LocalDateTime类型。最后,使用toInstant()方法将LocalDateTime类型转换为Instant类型,再将其转换为Date类型。
三、Date转LocalDate
如果想将Date类型转换为LocalDate类型,我们需要使用toInstant()方法将Date类型转换为Instant类型,再将其转换为在指定时区的ZonedDateTime类型,最后使用toLocalDate()方法将其转换为LocalDate类型:
Date date = new Date(); Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zonedDateTime = instant.atZone(zoneId); LocalDate localDate = zonedDateTime.toLocalDate();
可以看到,这种转换方式较为繁琐,需要进行多次转换。因此,如果需要将Date类型转换为LocalDateTime类型,则可以在上述代码基础上采用类似的方式:
Date date = new Date(); Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zonedDateTime = instant.atZone(zoneId); LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
四、LocalDate转Date
如果想将LocalDate类型转换为Date类型,需要将其转换为ZonedDateTime类型,再按照上一部分中的方式进行转换:
LocalDate localDate = LocalDate.now(); ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zonedDateTime = localDate.atStartOfDay(zoneId); Date date = Date.from(zonedDateTime.toInstant());
在上面的示例中,我们使用now()方法获取当前日期,使用atStartOfDay()方法将其转换为LocalDateTime类型,再使用atZone()方法将其转换为ZonedDateTime类型。
总结
在Java 8中,日期/时间类型的转换变得更加简单和清晰。通过使用LocalDate和LocalDateTime类型,我们可以更好地处理日期和时间信息。在进行转换时,需要注意时间的设定,以及时区的设置。同时,需要根据实际需求选择合适的类型和方法。