Java中Date与LocalDate、LocalDateTime之间的区别及相互转换
java.util.Date
是Java中表示日期和时间的一个类,但由于设计上的问题(如年份是1900起,月份是0-11),使用起来并不方便。
java.time.LocalDate
是不包含时间的日期,常用于只需日期的场景。
java.time.LocalDateTime
是不包含时区的日期和时间。
要实现它们之间的转换,可以使用java.time.ZoneId
和java.time.ZoneOffset
等类。
解决方案:
- 将
java.util.Date
转换为java.time.LocalDateTime:
Date date = new Date();
LocalDateTime localDateTime = date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
- 将
java.util.Date
转换为java.time.LocalDate:
Date date = new Date();
LocalDate localDate = Instant.ofEpochMilli(date.getTime())
.atZone(ZoneId.systemDefault())
.toLocalDate();
- 将
java.time.LocalDateTime
转换为java.util.Date:
LocalDateTime localDateTime = LocalDateTime.now();
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
- 将
java.time.LocalDate
转换为java.util.Date:
LocalDate localDate = LocalDate.now();
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
- 将
java.time.LocalDateTime
转换为java.time.LocalDate:
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate();
- 将
java.time.LocalDate
转换为java.time.LocalDateTime:
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = localDate.atStartOfDay();
注意:以上转换都考虑了系统默认的时区,如果需要转换为其他时区,只需要将ZoneId.systemDefault()
替换为ZoneId.of("时区ID")
。
评论已关闭