Table of Contents
ToggleJava Convert Date to LocalDate
將 Date 轉換成 LocalDate ,Java 8 起,有新的日期 API – java.time ,然而有時仍然需要在新舊 API 之間執行轉換,並使用兩者的日期表示, Java Date LocalDate 任務是將該 Date 轉換為 LocalDate ,本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- conversion
| +- datetime
| +- DateToLocalDateTest.java
單元測試
Java Date to LocalDate 提供 Date 轉換成 LocalDate 等操作。
toLocalDate
Java Date to LocalDate 使用 toInstant 轉換成 LocalDate 。
@Test
public void toLocalDate() {
Calendar calendar = Calendar.getInstance();
calendar.set(2023, 3, 4, 0, 0, 0);
Date date = calendar.getTime();
ZoneId zone = ZoneId.of("Asia/Sakhalin");
LocalDate localDate = date.toInstant().atZone(zone).toLocalDate();
System.out.println(localDate);
assertEquals("2023-04-04", localDate.toString());
}
2023-04-04
toLocalDateWithOfEpochMilli
Java Date to LocalDate 使用 Instant.ofEpochMilli 轉換成 LocalDate 。
@Test
public void toLocalDateWithOfEpochMilli() {
Calendar calendar = Calendar.getInstance();
calendar.set(2023, 3, 4, 0, 0, 0);
Date date = calendar.getTime();
ZoneId zone = ZoneId.of("Asia/Sakhalin");
LocalDate localDate = Instant.ofEpochMilli(date.getTime()).atZone(zone).toLocalDate();
System.out.println(localDate);
assertEquals("2023-04-04", localDate.toString());
}
2023-04-04
toZonedDateTime
Java Date to LocalDate 使用 toInstant 轉換成 ZonedDateTime。
@Test
public void toZonedDateTime() {
Calendar calendar = Calendar.getInstance();
calendar.set(2023, 3, 4, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date date = calendar.getTime();
ZoneId zone = ZoneId.of("Asia/Sakhalin");
ZonedDateTime zonedDateTime = date.toInstant().atZone(zone);
System.out.println(zonedDateTime);
assertEquals("2023-04-04T03:00+11:00[Asia/Sakhalin]", zonedDateTime.toString());
}
2023-04-04T03:00+11:00[Asia/Sakhalin]
toLocalDateWithValueOf
Java Date to LocalDate 使用 sql.Date 轉換成 LocalDate 。
@Test
public void toLocalDateWithValueOf() {
java.sql.Date sqlDate = java.sql.Date.valueOf("2023-04-04");
LocalDate localDate = sqlDate.toLocalDate();
System.out.println(localDate);
assertEquals("2023-04-04", localDate.toString());
}
2023-04-04
DateToLocalDateTest.java
Convert Date to LocalDate in Java 新增單元測試,驗證是否符合預期。
package org.ruoxue.java_147.conversion.datetime;
import static org.junit.Assert.*;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import org.junit.Test;
public class DateToLocalDate {
@Test
public void toLocalDate() {
Calendar calendar = Calendar.getInstance();
calendar.set(2023, 3, 4, 0, 0, 0);
Date date = calendar.getTime();
ZoneId zone = ZoneId.of("Asia/Sakhalin");
LocalDate localDate = date.toInstant().atZone(zone).toLocalDate();
System.out.println(localDate);
assertEquals("2023-04-04", localDate.toString());
}
@Test
public void toLocalDateWithOfEpochMilli() {
Calendar calendar = Calendar.getInstance();
calendar.set(2023, 3, 4, 0, 0, 0);
Date date = calendar.getTime();
ZoneId zone = ZoneId.of("Asia/Sakhalin");
LocalDate localDate = Instant.ofEpochMilli(date.getTime()).atZone(zone).toLocalDate();
System.out.println(localDate);
assertEquals("2023-04-04", localDate.toString());
}
@Test
public void toZonedDateTime() {
Calendar calendar = Calendar.getInstance();
calendar.set(2023, 3, 4, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date date = calendar.getTime();
ZoneId zone = ZoneId.of("Asia/Sakhalin");
ZonedDateTime zonedDateTime = date.toInstant().atZone(zone);
System.out.println(zonedDateTime);
assertEquals("2023-04-04T03:00+11:00[Asia/Sakhalin]", zonedDateTime.toString());
}
@Test
public void toLocalDateWithValueOf() {
java.sql.Date sqlDate = java.sql.Date.valueOf("2023-04-04");
LocalDate localDate = sqlDate.toLocalDate();
System.out.println(localDate);
assertEquals("2023-04-04", localDate.toString());
}
}
心得分享
Date to LocalDate in Java 可以使用新的 toInstant 方法,此方法已加入到 Java 8 中的 java.util.Date 中,當轉換成 Instant 物件時,需要使用 ZoneId,因為 Instant 物件與時區無關,提供將 Date 實例轉換為 LocalDate 實例的多種方法。