Initialize LocalDateTime in Java - Java 147

Initialize LocalDateTime in Java – Java 147

Initialize LocalDateTime in Java

初始化 LocalDateTime 物件的值不會被改變,可以同時在不同的執行緒下被使用,介紹常見的 of 、 parse 、 ofEpochMilli 等方法,了解 Initialize LocalDateTime Java 的不同操作和方法,本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- datetime
       |                   +- localdatetime
       |                       +- InitializeLocalDateTimeTest.java   

單元測試

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

now

建立一個 LocalDateTime ,提供目前日期時間。

	@Test
	public void now() {
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println(localDateTime);

		ZoneId zone = ZoneId.of("Asia/Tokyo");
		localDateTime = LocalDateTime.now(zone);
		System.out.println(localDateTime);

		zone = ZoneId.of("UTC+9");
		Clock clock = Clock.system(zone);
		localDateTime = LocalDateTime.now(clock);
		System.out.println(localDateTime);
		
		zone = ZoneId.of("Etc/GMT-9");
		localDateTime = LocalDateTime.now(zone);
		System.out.println(localDateTime);
	}
2023-08-03T01:02:03
2023-08-03T01:02:03+09:00
2023-08-03T01:02:03
2023-08-03T01:02:03

of

建立一個 LocalDateTime ,建立指定日期時間。

	@Test
	public void of() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());

		long epochSecond = localDateTime.toEpochSecond(ZoneOffset.UTC);
		System.out.println(epochSecond);
		assertEquals(1691024523L, epochSecond);

		localDateTime = LocalDateTime.of(2023, Month.AUGUST, 4, 1, 2, 3);
		System.out.println(localDateTime);
		assertEquals("2023-08-04T01:02:03", localDateTime.toString());

		localDateTime = LocalDateTime.ofEpochSecond(1691197323, 0, ZoneOffset.UTC);
		System.out.println(localDateTime);
		assertEquals("2023-08-05T01:02:03", localDateTime.toString());
	}
2023-08-03T01:02:03
1691024523
2023-08-04T01:02:03
2023-08-05T01:02:03

ofDateTime

Java Initialize LocalDateTime 建立一個 LocalDateTime ,建立指定日期時間。

	@Test
	public void ofDateTime() {
		LocalDate localDate = LocalDate.of(2023, 8, 3);
		LocalTime localTime = LocalTime.of(1, 2, 3);
		LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
	}
2023-08-03T01:02:03

parse

Java Initialize LocalDateTime 建立一個 LocalDateTime ,建立指定日期時間。

	@Test
	public void parse() {
		LocalDateTime localDateTime = LocalDateTime.parse("2023-08-03T01:02:03");
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());

		localDateTime = LocalDateTime.parse("20230803 010203", DateTimeFormatter.ofPattern("yyyyMMdd HHmmss"));
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
		
		localDateTime = LocalDateTime.parse("2023/08/03 01:02:03", DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
	}
2023-08-03T01:02:03
2023-08-03T01:02:03
2023-08-03T01:02:03

from

LocalDateTime Initialization Java 建立一個 LocalDateTime ,從另一個日期時間,建立指定日期時間。

	@Test
	public void from() {
		LocalDateTime localDateTime = LocalDateTime.parse("2023-08-03T01:02:03");
		LocalDateTime result = LocalDateTime.from(localDateTime);
		System.out.println(result);
		assertEquals("2023-08-03T01:02:03", result.toString());
		
		localDateTime = LocalDateTime.parse("2023-08-03T01:02:03");
		ZoneOffset zoneOffset = ZoneOffset.of("+09:00");
		OffsetDateTime offsetDateTime = OffsetDateTime.of(localDateTime, zoneOffset);
		System.out.println(offsetDateTime);
		result = LocalDateTime.from(offsetDateTime);
		System.out.println(result);
		assertEquals("2023-08-03T01:02:03", result.toString());

		ZonedDateTime zonedDateTime = ZonedDateTime.parse("2023-08-03T01:02:03+09:00[Asia/Tokyo]");
		result = LocalDateTime.from(zonedDateTime);
		System.out.println(result);
		assertEquals("2023-08-03T01:02:03", result.toString());
	}
2023-08-03T01:02:03
2023-08-03T01:02:03+09:00
2023-08-03T01:02:03
2023-08-03T01:02:03

ofEpochSecond

LocalDateTime Initialization Java 建立一個 LocalDateTime ,將紀元秒轉成指定日期時間。

	@Test
	public void ofEpochSecond() {
		ZoneOffset zoneOffset = ZoneOffset.of("+08:00");
		LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(1690995723L, 0, zoneOffset);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());

		ZoneId zone = ZoneId.of("UTC+8");
		Instant instant = Instant.ofEpochSecond(1690995723L, 0);
		localDateTime = LocalDateTime.ofInstant(instant, zone);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
	}
2023-08-03T01:02:03
2023-08-03T01:02:03

ofEpochMilli

LocalDateTime Initialization Java 建立一個 LocalDateTime ,將紀元毫秒轉成指定日期時間。

	@Test
	public void ofEpochMilli() {
		ZoneId zone = ZoneId.of("UTC+8");
		Instant instant = Instant.ofEpochMilli(1690995723000L);
		LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
	}
2023-08-03T01:02:03

InitializeLocalDateTimeTest.java

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

package org.ruoxue.java_147.datetime.localdatetime;

import static org.junit.Assert.*;

import java.time.Clock;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
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 InitializeLocalDateTimeTest {

	@Test
	public void now() {
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println(localDateTime);

		ZoneId zone = ZoneId.of("Asia/Tokyo");
		localDateTime = LocalDateTime.now(zone);
		System.out.println(localDateTime);

		zone = ZoneId.of("UTC+9");
		Clock clock = Clock.system(zone);
		localDateTime = LocalDateTime.now(clock);
		System.out.println(localDateTime);
		
		zone = ZoneId.of("Etc/GMT-9");
		localDateTime = LocalDateTime.now(zone);
		System.out.println(localDateTime);
	}

	@Test
	public void of() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());

		long epochSecond = localDateTime.toEpochSecond(ZoneOffset.UTC);
		System.out.println(epochSecond);
		assertEquals(1691024523L, epochSecond);

		localDateTime = LocalDateTime.of(2023, Month.AUGUST, 4, 1, 2, 3);
		System.out.println(localDateTime);
		assertEquals("2023-08-04T01:02:03", localDateTime.toString());

		localDateTime = LocalDateTime.ofEpochSecond(1691197323, 0, ZoneOffset.UTC);
		System.out.println(localDateTime);
		assertEquals("2023-08-05T01:02:03", localDateTime.toString());
	}

	@Test
	public void ofDateTime() {
		LocalDate localDate = LocalDate.of(2023, 8, 3);
		LocalTime localTime = LocalTime.of(1, 2, 3);
		LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
	}

	@Test
	public void parse() {
		LocalDateTime localDateTime = LocalDateTime.parse("2023-08-03T01:02:03");
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());

		localDateTime = LocalDateTime.parse("20230803 010203", DateTimeFormatter.ofPattern("yyyyMMdd HHmmss"));
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
		
		localDateTime = LocalDateTime.parse("2023/08/03 01:02:03", DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
	}

	@Test
	public void from() {
		LocalDateTime localDateTime = LocalDateTime.parse("2023-08-03T01:02:03");
		LocalDateTime result = LocalDateTime.from(localDateTime);
		System.out.println(result);
		assertEquals("2023-08-03T01:02:03", result.toString());
		
		localDateTime = LocalDateTime.parse("2023-08-03T01:02:03");
		ZoneOffset zoneOffset = ZoneOffset.of("+09:00");
		OffsetDateTime offsetDateTime = OffsetDateTime.of(localDateTime, zoneOffset);
		System.out.println(offsetDateTime);
		result = LocalDateTime.from(offsetDateTime);
		System.out.println(result);
		assertEquals("2023-08-03T01:02:03", result.toString());

		ZonedDateTime zonedDateTime = ZonedDateTime.parse("2023-08-03T01:02:03+09:00[Asia/Tokyo]");
		result = LocalDateTime.from(zonedDateTime);
		System.out.println(result);
		assertEquals("2023-08-03T01:02:03", result.toString());
	}

	@Test
	public void ofEpochSecond() {
		ZoneOffset zoneOffset = ZoneOffset.of("+08:00");
		LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(1690995723L, 0, zoneOffset);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());

		ZoneId zone = ZoneId.of("UTC+8");
		Instant instant = Instant.ofEpochSecond(1690995723L, 0);
		localDateTime = LocalDateTime.ofInstant(instant, zone);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
	}

	@Test
	public void ofEpochMilli() {
		ZoneId zone = ZoneId.of("UTC+8");
		Instant instant = Instant.ofEpochMilli(1690995723000L);
		LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
		System.out.println(localDateTime);
		assertEquals("2023-08-03T01:02:03", localDateTime.toString());
	}
}

心得分享

Java LocalDateTime Initialize 新的日期時間 API,將區域獨立成一個類別,減少日期時間的複雜度,讓日期和時間進行運算時更加便利,LocalDateTime Initialization Java 提供了幾種 LocalDateTime 初始化的操作範例,使用單元測試驗證產出結果。

發佈留言