Java Convert LocalDateTime to ZonedDateTime - Java 147

Java Convert LocalDateTime to ZonedDateTime – Java 147

Java Convert LocalDateTime to ZonedDateTime

將 LocalDateTime 轉換為 ZonedDateTime,在日期後附加時區信息,轉換步驟如下: 1. 取得時區,以便可以將時區資訊附加到日期,2. 調用 atZone 以便可以將時區附加到日期, Java LocalDateTime ZonedDateTime 任務是將該 LocalDateTime 轉換為 ZonedDateTime ,本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- conversion
       |                   +- datetime
       |                       +- LocalDateTimeToZonedDateTimeTest.java   

單元測試

Java LocalDateTime to ZonedDateTime 提供 LocalDateTime 轉換成 ZonedDateTime 等操作。

atZone

Java LocalDateTime to ZonedDateTime 使用 atZone 轉換成 ZonedDateTime 。

	@Test
	public void atZone() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZonedDateTime result = localDateTime.atZone(zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		result = localDateTime.atZone(zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]

of

Java LocalDateTime to ZonedDateTime 使用 of 轉換成 ZonedDateTime 。

	@Test
	public void of() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZonedDateTime result = ZonedDateTime.of(localDateTime, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		result = ZonedDateTime.of(localDateTime, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]

ofInstant

Java LocalDateTime to ZonedDateTime 使用 ofInstant 轉換成 ZonedDateTime 。

	@Test
	public void ofInstant() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZoneOffset zoneOffset = zone.getRules().getOffset(localDateTime);
		ZonedDateTime result = ZonedDateTime.ofInstant(localDateTime, zoneOffset, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		zoneOffset = zone.getRules().getOffset(localDateTime);
		result = ZonedDateTime.ofInstant(localDateTime, zoneOffset, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]

ofLocal

Java LocalDateTime to ZonedDateTime 使用 ofLocal 轉換成 ZonedDateTime 。

	@Test
	public void ofLocal() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZoneOffset zoneOffset = zone.getRules().getOffset(localDateTime);
		ZonedDateTime result = ZonedDateTime.ofLocal(localDateTime, zone, zoneOffset);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		zoneOffset = zone.getRules().getOffset(localDateTime);
		result = ZonedDateTime.ofLocal(localDateTime, zone, zoneOffset);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]

ofStrict

Java LocalDateTime to ZonedDateTime 使用 ofStrict 轉換成 ZonedDateTime 。

	@Test
	public void ofStrict() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZoneOffset zoneOffset = zone.getRules().getOffset(localDateTime);
		ZonedDateTime result = ZonedDateTime.ofStrict(localDateTime, zoneOffset, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		zoneOffset = zone.getRules().getOffset(localDateTime);
		result = ZonedDateTime.ofStrict(localDateTime, zoneOffset, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]
2023-04-04T05:04:03
2023-04-04T05:04:03+11:00[Asia/Sakhalin]

LocalDateTimeToZonedDateTimeTest.java

Convert LocalDateTime to ZonedDateTime in Java 新增單元測試,驗證是否符合預期。

package org.ruoxue.java_147.conversion.datetime;

import static org.junit.Assert.assertEquals;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;

import org.junit.Test;

public class LocalDateTimeToZonedDateTimeTest {

	@Test
	public void atZone() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZonedDateTime result = localDateTime.atZone(zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		result = localDateTime.atZone(zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}

	@Test
	public void of() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZonedDateTime result = ZonedDateTime.of(localDateTime, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		result = ZonedDateTime.of(localDateTime, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}

	@Test
	public void ofInstant() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZoneOffset zoneOffset = zone.getRules().getOffset(localDateTime);
		ZonedDateTime result = ZonedDateTime.ofInstant(localDateTime, zoneOffset, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		zoneOffset = zone.getRules().getOffset(localDateTime);
		result = ZonedDateTime.ofInstant(localDateTime, zoneOffset, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}

	@Test
	public void ofLocal() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZoneOffset zoneOffset = zone.getRules().getOffset(localDateTime);
		ZonedDateTime result = ZonedDateTime.ofLocal(localDateTime, zone, zoneOffset);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		zoneOffset = zone.getRules().getOffset(localDateTime);
		result = ZonedDateTime.ofLocal(localDateTime, zone, zoneOffset);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}

	@Test
	public void ofStrict() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 4, 4, 5, 4, 3);
		System.out.println(localDateTime);
		ZoneId zone = ZoneId.of("Asia/Sakhalin");
		ZoneOffset zoneOffset = zone.getRules().getOffset(localDateTime);
		ZonedDateTime result = ZonedDateTime.ofStrict(localDateTime, zoneOffset, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());

		localDateTime = LocalDateTime.parse("2023-04-04T05:04:03");
		System.out.println(localDateTime);
		zoneOffset = zone.getRules().getOffset(localDateTime);
		result = ZonedDateTime.ofStrict(localDateTime, zoneOffset, zone);
		System.out.println(result);
		assertEquals("2023-04-04T05:04:03+11:00[Asia/Sakhalin]", result.toString());
	}

}

心得分享

LocalDateTime to ZonedDateTime in Java 將 LocalDateTime 轉換為 ZonedDateTime 實例的方法,簡單來說過程如: LocalDateTime -> java.util.ZonedDateTime 這些步驟等, Convert LocalDateTime to ZonedDateTime in Java 提供將 LocalDateTime 實例轉換為 ZonedDateTime 實例的方法。

發佈留言