Java中Date與LocalDateTime/LocalDate/LocalTime的相互轉換
阿新 • • 發佈:2022-04-28
java.util.Date 包含了日期、時間、毫秒數等
java.time.LocalDate 僅包含日期
Date物件的例項化方式有:
1. new Date()
2. new Date(long date):
通過毫秒數初始化。毫秒數可以通過 java.sql.Timestamp物件的.getTime() 獲得
3. Date.from(Instant instant):
通過 Instant 物件初始化。instant為時刻、瞬間的意思
Instant 可以由 ZonedDateTime 或 Timestamp 的例項物件呼叫 toInstant() 獲取
一、Date
轉LocalDateTime/LocalDate/LocalTime
Date date = new Date(); // 時區 ZoneId zoneId = ZoneId.systemDefault(); // 方式1 ZonedDateTime zonedDateTime = date.toInstant().atZone(zoneId); LocalDateTime localDateTime1 = zonedDateTime.toLocalDateTime(); LocalDate localDate1 = zonedDateTime.toLocalDate(); LocalTime localTime1 = zonedDateTime.toLocalTime(); // 方式2 LocalDateTime localDateTime2 = LocalDateTime.ofInstant(date.toInstant(), zoneId); LocalDate localDate2 = localDateTime2.toLocalDate(); LocalTime localTime2 = localDateTime2.toLocalTime();
二、LocalDateTime/LocalDate/LocalTime
轉Date
1. LocalDateTime
轉Date
LocalDateTime now = LocalDateTime.now();
// 時區
ZoneId zoneId = ZoneId.systemDefault();
Instant instant = now.atZone(zoneId).toInstant();
Date date = Date.from(instant);
2. LocalDate
轉Date
// 由於`LocalDate`不帶有時間資訊,所以必須設定時間,才能轉 Date LocalDate now = LocalDate.now(); System.out.println(now); System.out.println("------"); // 時區 ZoneId zoneId = ZoneId.systemDefault(); Instant instant; Date date; // 方式1:atStartOfDay,自動賦予午夜時間,返回 LocalDateTime,設定時區返回 ZonedDateTime,進而得到 Instant instant = now.atStartOfDay().atZone(zoneId).toInstant(); date = Date.from(instant); System.out.println(date); // 方式2 instant = now.atStartOfDay(zoneId).toInstant(); date = Date.from(instant); System.out.println(date); // 方式3:atStartOfDay 的底層實現 instant = now.atTime(LocalTime.MIDNIGHT).atZone(zoneId).toInstant(); date = Date.from(instant); System.out.println(date); // 方式4 instant = LocalDateTime.of(now, LocalTime.MIDNIGHT).atZone(zoneId).toInstant(); date = Date.from(instant); System.out.println(date); // 方式5:通過 Timestamp 得到 Instant instant = Timestamp.valueOf(now.atTime(LocalTime.MIDNIGHT)).toInstant(); date = Date.from(instant); System.out.println(date); // 方式6 instant = Timestamp.valueOf(LocalDateTime.of(now, LocalTime.MIDNIGHT)).toInstant(); date = Date.from(instant); System.out.println(date); // 方式7:通過毫秒數初始化 Date 物件 Timestamp timestamp = Timestamp.valueOf(now.atTime(LocalTime.MIDNIGHT)); date = new Date(timestamp.getTime()); System.out.println(date);
3. LocalTime
轉Date
// 由於 LocalTime 不帶有日期資訊,所以必須設定日期,才能轉 Date
LocalTime nowTime = LocalTime.now();
LocalDate nowDate = LocalDate.now();
System.out.println(nowTime);
System.out.println("------");
// 時區
ZoneId zoneId = ZoneId.systemDefault();
Instant instant;
Date date;
instant = LocalDateTime.of(nowDate, nowTime).atZone(zoneId).toInstant();
date = Date.from(instant);
System.out.println(date);
instant = Timestamp.valueOf(LocalDateTime.of(nowDate, nowTime)).toInstant();
date = Date.from(instant);
System.out.println(date);
Timestamp timestamp = Timestamp.valueOf(LocalDateTime.of(nowDate, nowTime));
date = new Date(timestamp.getTime());
System.out.println(date);