1. Date
→ LocalDateTime
/ LocalDate
/ LocalTime
Date
本质上是一个时间戳,需要借助 Instant
和 ZoneId
转换:
import java.time.*;
import java.util.Date;
public class DateConvert {
public static void main(String[] args) {
Date date = new Date(); // 当前时间
ZoneId zone = ZoneId.systemDefault(); // 系统默认时区
// Date -> LocalDateTime
LocalDateTime localDateTime = date.toInstant().atZone(zone).toLocalDateTime();
System.out.println("LocalDateTime: " + localDateTime);
// Date -> LocalDate
LocalDate localDate = date.toInstant().atZone(zone).toLocalDate();
System.out.println("LocalDate: " + localDate);
// Date -> LocalTime
LocalTime localTime = date.toInstant().atZone(zone).toLocalTime();
System.out.println("LocalTime: " + localTime);
}
}
2. LocalDateTime
/ LocalDate
/ LocalTime
→ Date
(1) LocalDateTime
→ Date
LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zone = ZoneId.systemDefault();
Date date = Date.from(localDateTime.atZone(zone).toInstant());
System.out.println("Date: " + date);
(2) LocalDate
→ Date
LocalDate
没有时间,需要补上时间(通常是一天的开始 00:00:00):
LocalDate localDate = LocalDate.now();
ZoneId zone = ZoneId.systemDefault();
Date date = Date.from(localDate.atStartOfDay(zone).toInstant());
System.out.println("Date: " + date);
(3) LocalTime
→ Date
LocalTime
没有日期,需要和 LocalDate
拼接:
LocalTime localTime = LocalTime.now();
LocalDate localDate = LocalDate.now();
ZoneId zone = ZoneId.systemDefault();
Date date = Date.from(LocalDateTime.of(localDate, localTime).atZone(zone).toInstant());
System.out.println("Date: " + date);
3. 小结
Date
↔Instant
是桥梁。- 时区要用
ZoneId
,否则会出现偏差。 LocalDate
、LocalTime
需要补充成LocalDateTime
才能转Date
。
发表回复