Initialize LocalDate in Java - Java 147

Initialize LocalDate in Java – Java 147

Initialize LocalDate in Java

初始化 LocalDate 物件的值不會被改變,是一個不可變的類別,表示日期,預設格式為 yyyy-mm-dd,介紹常見的 of 、 parse 、 ofEpochDay 等方法,了解 Initialize LocalDate Java 的不同操作和方法,本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- datetime
       |                   +- localdate
       |                       +- InitializeLocalDateTest.java   

單元測試

Java Initialize LocalDate 提供初始化操作 LocalDate 。

now

建立一個 LocalDate ,提供目前日期。

	@Test
	public void now() {
		LocalDate localDate = LocalDate.now();
		System.out.println(localDate);

		ZoneId zone = ZoneId.of("America/Chicago");
		localDate = LocalDate.now(zone);
		System.out.println(localDate);

		zone = ZoneId.of("UTC-5");
		Clock clock = Clock.system(zone);
		localDate = LocalDate.now(clock);
		System.out.println(localDate);

		zone = ZoneId.of("Etc/GMT+5");
		localDate = LocalDate.now(zone);
		System.out.println(localDate);
	}
2023-06-25
2023-06-24
2023-06-24
2023-06-24

of

建立一個 LocalDate ,建立指定日期。

	@Test
	public void of() {
		LocalDate localDate = LocalDate.of(2023, 6, 18);
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());

		long epochDay = localDate.toEpochDay();
		System.out.println(epochDay);
		assertEquals(19526L, epochDay);

		localDate = LocalDate.of(2023, Month.JUNE, 19);
		System.out.println(localDate);
		assertEquals("2023-06-19", localDate.toString());

		localDate = LocalDate.ofEpochDay(19528L);
		System.out.println(localDate);
		assertEquals("2023-06-20", localDate.toString());
	}
2023-06-18
19526
2023-06-19
2023-06-20

parse

Java Initialize LocalDate 建立一個 LocalDate ,建立指定日期。

	@Test
	public void parse() {
		LocalDate localDate = LocalDate.parse("2023-06-18");
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());

		localDate = LocalDate.parse("20230618", DateTimeFormatter.ofPattern("yyyyMMdd"));
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());

		localDate = LocalDate.parse("2023/06/18", DateTimeFormatter.ofPattern("yyyy/MM/dd"));
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());
	}
2023-06-18
2023-06-18
2023-06-18

from

LocalDate Initialization Java 建立一個 LocalDate ,從另一個日期,建立指定日期。

	@Test
	public void from() {
		LocalDate localDate = LocalDate.parse("2023-06-18");
		LocalDate result = LocalDate.from(localDate);
		System.out.println(result);
		assertEquals("2023-06-18", result.toString());

		LocalDateTime localDateTime = LocalDateTime.parse("2023-06-18T09:12:05");
		ZoneOffset zoneOffset = ZoneOffset.of("+05:00");
		OffsetDateTime offsetDateTime = OffsetDateTime.of(localDateTime, zoneOffset);
		System.out.println(offsetDateTime);
		result = LocalDate.from(offsetDateTime);
		System.out.println(result);
		assertEquals("2023-06-18", result.toString());

		ZonedDateTime zonedDateTime = ZonedDateTime.parse("2023-06-18T09:12:05+05:00[America/Chicago]");
		result = LocalDate.from(zonedDateTime);
		System.out.println(result);
		assertEquals("2023-06-18", result.toString());
	}
2023-06-18
2023-06-18T09:12:05+05:00
2023-06-18
2023-06-18

ofEpochDay

LocalDate Initialization Java 建立一個 LocalDate ,將紀元日轉成指定日期。

	@Test
	public void ofEpochDay() {
		LocalDate localDate = LocalDate.ofEpochDay(19526L);
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());
	}
2023-06-18

ofYearDay

LocalDate Initialization Java 建立一個 LocalDate ,將本年日轉成指定日期。

	@Test
	public void ofYearDay() {
		LocalDate localDate = LocalDate.ofYearDay(2023, 169);
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());
	}
2023-06-18

InitializeLocalDateTest.java

LocalDate Initialization Java 新增單元測試,驗證 Java LocalDate Initialize 是否符合預期。

package org.ruoxue.java_147.datetime.localdate;

import static org.junit.Assert.*;

import java.time.Clock;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

import org.junit.Test;

public class InitializeLocalDateTest {

	@Test
	public void now() {
		LocalDate localDate = LocalDate.now();
		System.out.println(localDate);

		ZoneId zone = ZoneId.of("America/Chicago");
		localDate = LocalDate.now(zone);
		System.out.println(localDate);

		zone = ZoneId.of("UTC-5");
		Clock clock = Clock.system(zone);
		localDate = LocalDate.now(clock);
		System.out.println(localDate);

		zone = ZoneId.of("Etc/GMT+5");
		localDate = LocalDate.now(zone);
		System.out.println(localDate);
	}

	@Test
	public void of() {
		LocalDate localDate = LocalDate.of(2023, 6, 18);
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());

		long epochDay = localDate.toEpochDay();
		System.out.println(epochDay);
		assertEquals(19526L, epochDay);

		localDate = LocalDate.of(2023, Month.JUNE, 19);
		System.out.println(localDate);
		assertEquals("2023-06-19", localDate.toString());

		localDate = LocalDate.ofEpochDay(19528L);
		System.out.println(localDate);
		assertEquals("2023-06-20", localDate.toString());
	}

	@Test
	public void parse() {
		LocalDate localDate = LocalDate.parse("2023-06-18");
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());

		localDate = LocalDate.parse("20230618", DateTimeFormatter.ofPattern("yyyyMMdd"));
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());

		localDate = LocalDate.parse("2023/06/18", DateTimeFormatter.ofPattern("yyyy/MM/dd"));
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());
	}

	@Test
	public void from() {
		LocalDate localDate = LocalDate.parse("2023-06-18");
		LocalDate result = LocalDate.from(localDate);
		System.out.println(result);
		assertEquals("2023-06-18", result.toString());

		LocalDateTime localDateTime = LocalDateTime.parse("2023-06-18T09:12:05");
		ZoneOffset zoneOffset = ZoneOffset.of("+05:00");
		OffsetDateTime offsetDateTime = OffsetDateTime.of(localDateTime, zoneOffset);
		System.out.println(offsetDateTime);
		result = LocalDate.from(offsetDateTime);
		System.out.println(result);
		assertEquals("2023-06-18", result.toString());

		ZonedDateTime zonedDateTime = ZonedDateTime.parse("2023-06-18T09:12:05+05:00[America/Chicago]");
		result = LocalDate.from(zonedDateTime);
		System.out.println(result);
		assertEquals("2023-06-18", result.toString());
	}

	@Test
	public void ofEpochDay() {
		LocalDate localDate = LocalDate.ofEpochDay(19526L);
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());
	}

	@Test
	public void ofYearDay() {
		LocalDate localDate = LocalDate.ofYearDay(2023, 169);
		System.out.println(localDate);
		assertEquals("2023-06-18", localDate.toString());
	}
}

心得分享

Java LocalDate Initialize 新的日期 API 跟以往複雜的日期 API 有著很大的不同,像是將區域分離,讓物件功能更加專職,簡化了許多日期的操作方法,LocalDate Initialization Java 提供了幾種 LocalDate 初始化的操作範例,使用單元測試驗證產出結果。

發佈留言