Java Convert Date to LocalDate - Java 147

Java Convert Date to LocalDate – Java 147

Java 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 實例的多種方法。

發佈留言