Initialize OffsetDateTime in Java - Java 147

Initialize OffsetDateTime in Java – Java 147

Initialize OffsetDateTime in Java

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

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- datetime
       |                   +- offsetdatetime
       |                       +- InitializeOffsetDateTimeTest.java   

單元測試

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

now

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

	@Test
	public void now() {
		OffsetDateTime offsetDateTime = OffsetDateTime.now();
		System.out.println(offsetDateTime);

		ZoneId zone = ZoneId.of("Egypt");
		offsetDateTime = OffsetDateTime.now(zone);
		System.out.println(offsetDateTime);

		zone = ZoneId.of("UTC+2");
		Clock clock = Clock.system(zone);
		offsetDateTime = OffsetDateTime.now(clock);
		System.out.println(offsetDateTime);

		zone = ZoneId.of("Etc/GMT-2");
		offsetDateTime = OffsetDateTime.now(zone);
		System.out.println(offsetDateTime);
	}
2023-07-08T16:38:46.527+08:00
2023-07-08T10:38:46.528+02:00
2023-07-08T10:38:46.528+02:00
2023-07-08T10:38:46.528+02:00

of

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

	@Test
	public void of() {
		ZoneOffset offset = ZoneOffset.ofHours(2);
		OffsetDateTime offsetDateTime = OffsetDateTime.of(2023, 12, 25, 5, 4, 3, 0, offset);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());

		long epochSecond = offsetDateTime.toEpochSecond();
		System.out.println(epochSecond);
		assertEquals(1703473443L, epochSecond);

		offsetDateTime = OffsetDateTime.of(LocalDateTime.of(2023, 12, 25, 5, 4, 3, 0), offset);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());

		offsetDateTime = OffsetDateTime.of(LocalDate.of(2023, 12, 25), LocalTime.of(5, 4, 3, 0), offset);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());
	}
2023-12-25T05:04:03+02:00
1703473443
2023-12-25T05:04:03+02:00
2023-12-25T05:04:03+02:00

ofInstant

Java Initialize OffsetDateTime 建立一個 OffsetDateTime ,使用 Instant 建立指定日期時間。

	@Test
	public void ofInstant() {
		ZoneId zone = ZoneId.of("Egypt");
		OffsetDateTime offsetDateTime = OffsetDateTime.ofInstant(Instant.parse("2023-12-25T03:04:03Z"), zone);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());
	}
2023-12-25T05:04:03+02:00

parse

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

	@Test
	public void parse() {
		OffsetDateTime offsetDateTime = OffsetDateTime.parse("2023-12-25T05:04:03+02:00");
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());

		offsetDateTime = OffsetDateTime.parse("2023-12-25T05:04:03.123456789+02:00");
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03.123456789+02:00", offsetDateTime.toString());

		offsetDateTime = OffsetDateTime.parse("2023/12/25 05:04:03.123+0200",
				DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSSZ"));
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03.123+02:00", offsetDateTime.toString());
	}
2023-12-25T05:04:03+02:00
2023-12-25T05:04:03.123456789+02:00
2023-12-25T05:04:03.123+02:00

from

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

	@Test
	public void from() {
		ZoneOffset offset = ZoneOffset.ofHours(2);
		OffsetDateTime offsetDateTime = OffsetDateTime.of(2023, 12, 25, 5, 4, 3, 0, offset);
		OffsetDateTime result = OffsetDateTime.from(offsetDateTime);
		System.out.println(result);
		assertEquals("2023-12-25T05:04:03+02:00", result.toString());
	}
2023-12-25T05:04:03+02:00

ofEpochMilli

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

	@Test
	public void ofEpochMilli() {
		ZoneId zone = ZoneId.of("UTC+2");
		Instant instant = Instant.ofEpochMilli(1703473443000L);
		OffsetDateTime offsetDateTime = OffsetDateTime.ofInstant(instant, zone);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());

		instant = Instant.ofEpochMilli(1703473443123L);
		offsetDateTime = OffsetDateTime.ofInstant(instant, zone);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03.123+02:00", offsetDateTime.toString());
	}
2023-12-25T05:04:03+02:00
2023-12-25T05:04:03.123+02:00

InitializeOffsetDateTimeTest.java

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

package org.ruoxue.java_147.datetime.offsetdatetime;

import static org.junit.Assert.*;

import java.time.Clock;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

import org.junit.Test;

public class InitializeOffsetDateTimeTest {

	@Test
	public void now() {
		OffsetDateTime offsetDateTime = OffsetDateTime.now();
		System.out.println(offsetDateTime);

		ZoneId zone = ZoneId.of("Egypt");
		offsetDateTime = OffsetDateTime.now(zone);
		System.out.println(offsetDateTime);

		zone = ZoneId.of("UTC+2");
		Clock clock = Clock.system(zone);
		offsetDateTime = OffsetDateTime.now(clock);
		System.out.println(offsetDateTime);

		zone = ZoneId.of("Etc/GMT-2");
		offsetDateTime = OffsetDateTime.now(zone);
		System.out.println(offsetDateTime);
	}

	@Test
	public void of() {
		ZoneOffset offset = ZoneOffset.ofHours(2);
		OffsetDateTime offsetDateTime = OffsetDateTime.of(2023, 12, 25, 5, 4, 3, 0, offset);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());

		long epochSecond = offsetDateTime.toEpochSecond();
		System.out.println(epochSecond);
		assertEquals(1703473443L, epochSecond);

		offsetDateTime = OffsetDateTime.of(LocalDateTime.of(2023, 12, 25, 5, 4, 3, 0), offset);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());

		offsetDateTime = OffsetDateTime.of(LocalDate.of(2023, 12, 25), LocalTime.of(5, 4, 3, 0), offset);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());
	}

	@Test
	public void ofInstant() {
		ZoneId zone = ZoneId.of("Egypt");
		OffsetDateTime offsetDateTime = OffsetDateTime.ofInstant(Instant.parse("2023-12-25T03:04:03Z"), zone);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());
	}

	@Test
	public void parse() {
		OffsetDateTime offsetDateTime = OffsetDateTime.parse("2023-12-25T05:04:03+02:00");
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());

		offsetDateTime = OffsetDateTime.parse("2023-12-25T05:04:03.123456789+02:00");
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03.123456789+02:00", offsetDateTime.toString());

		offsetDateTime = OffsetDateTime.parse("2023/12/25 05:04:03.123+0200",
				DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSSZ"));
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03.123+02:00", offsetDateTime.toString());
	}

	@Test
	public void from() {
		ZoneOffset offset = ZoneOffset.ofHours(2);
		OffsetDateTime offsetDateTime = OffsetDateTime.of(2023, 12, 25, 5, 4, 3, 0, offset);
		OffsetDateTime result = OffsetDateTime.from(offsetDateTime);
		System.out.println(result);
		assertEquals("2023-12-25T05:04:03+02:00", result.toString());
	}

	@Test
	public void ofEpochMilli() {
		ZoneId zone = ZoneId.of("UTC+2");
		Instant instant = Instant.ofEpochMilli(1703473443000L);
		OffsetDateTime offsetDateTime = OffsetDateTime.ofInstant(instant, zone);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03+02:00", offsetDateTime.toString());

		instant = Instant.ofEpochMilli(1703473443123L);
		offsetDateTime = OffsetDateTime.ofInstant(instant, zone);
		System.out.println(offsetDateTime);
		assertEquals("2023-12-25T05:04:03.123+02:00", offsetDateTime.toString());
	}
}

心得分享

Java OffsetDateTime Initialize 儲存日期和時間,精確到奈秒,以及帶有偏移量的日期時間,OffsetDateTime Initialization Java 提供了幾種 OffsetDateTime 初始化的操作範例,使用單元測試驗證產出結果。

發佈留言