Java LocalDateTime Methods - Java 147

Java LocalDateTime Methods – Java 147

Java LocalDateTime Methods

屬於 java.time ,提供了一組日期和時間相關的 API ,物件的值不會被改變,可以同時在不同的執行緒下被使用,介紹常見的 now 、 of 、 get 、 with 等方法, LocalDateTime Java Methods 本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

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

單元測試

LocalDateTime Methods Java 提供目前日期時間、建立、取得等操作 LocalDateTime 。

now

LocalDateTime Methods Java 建立一個 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-06-25T21:04:20.160
2023-06-25T22:04:20.161
2023-06-25T22:04:20.161
2023-06-25T22:04:20.161

of

LocalDateTime Methods Java 建立一個 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(1691024523, 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

LocalDateTime Methods Java 建立一個 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

get

LocalDateTime Methods Java 建立一個 LocalDateTime ,取得指定欄位,如:年、月、日等。

	@Test
	public void get() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		int year = localDateTime.get(ChronoField.YEAR);
		System.out.println(year);
		assertEquals(2023, year);

		int month = localDateTime.get(ChronoField.MONTH_OF_YEAR);
		System.out.println(month);
		assertEquals(8, month);

		int dayOfMonth = localDateTime.get(ChronoField.DAY_OF_MONTH);
		System.out.println(dayOfMonth);
		assertEquals(3, dayOfMonth);

		int dayOfWeek = localDateTime.get(ChronoField.DAY_OF_WEEK);
		System.out.println(dayOfWeek);
		assertEquals(4, dayOfWeek);

		int dayOfYear = localDateTime.get(ChronoField.DAY_OF_YEAR);
		System.out.println(dayOfYear);
		assertEquals(215, dayOfYear);

		int hourOfDay = localDateTime.get(ChronoField.HOUR_OF_DAY);
		System.out.println(hourOfDay);
		assertEquals(1, hourOfDay);

		int minuteOfHour = localDateTime.get(ChronoField.MINUTE_OF_HOUR);
		System.out.println(minuteOfHour);
		assertEquals(2, minuteOfHour);

		int secondOfMinute = localDateTime.get(ChronoField.SECOND_OF_MINUTE);
		System.out.println(secondOfMinute);
		assertEquals(3, secondOfMinute);
	}
2023
8
3
4
215
1
2
3

getValue

LocalDateTime Methods in Java 建立一個 LocalDateTime ,取得指定欄位,如:年、月、日等。

	@Test
	public void getValue() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		int year = localDateTime.getYear();
		System.out.println(year);
		assertEquals(2023, year);

		int month = localDateTime.getMonthValue();
		System.out.println(month);
		assertEquals(8, month);

		int dayOfMonth = localDateTime.getDayOfMonth();
		System.out.println(dayOfMonth);
		assertEquals(3, dayOfMonth);

		int dayOfWeek = localDateTime.getDayOfWeek().getValue();
		System.out.println(dayOfWeek);
		assertEquals(4, dayOfWeek);

		int dayOfYear = localDateTime.getDayOfYear();
		System.out.println(dayOfYear);
		assertEquals(215, dayOfYear);

		int hour = localDateTime.getHour();
		System.out.println(hour);
		assertEquals(1, hour);

		int minute = localDateTime.getMinute();
		System.out.println(minute);
		assertEquals(2, minute);

		int second = localDateTime.getSecond();
		System.out.println(second);
		assertEquals(3, second);
	}
2023
8
3
4
215
1
2
3

with

LocalDateTime Methods in Java 建立一個 LocalDateTime ,調整指定欄位,如:年、月、日等,傳回新物件。

	@Test
	public void with() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		LocalDateTime result = localDateTime.withYear(2024);
		int year = result.getYear();
		System.out.println(year);
		assertEquals(2024, year);

		result = localDateTime.withMonth(9);
		int month = result.getMonthValue();
		System.out.println(month);
		assertEquals(9, month);

		result = localDateTime.withDayOfMonth(4);
		int dayOfMonth = result.getDayOfMonth();
		System.out.println(dayOfMonth);
		assertEquals(4, dayOfMonth);

		result = localDateTime.withHour(2);
		int hour = result.getHour();
		System.out.println(hour);
		assertEquals(2, hour);

		result = localDateTime.withMinute(3);
		int minute = result.getMinute();
		System.out.println(minute);
		assertEquals(3, minute);

		result = localDateTime.withSecond(4);
		int second = result.getSecond();
		System.out.println(second);
		assertEquals(4, second);
	}
2024
9
4
2
3
4

withTemporalAdjuster

LocalDateTime Methods in Java 建立一個 LocalDateTime ,使用 TemporalAdjuster 調整指定欄位,如:年、月、日等,傳回新物件。

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

		result = localDateTime.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
		System.out.println(result);
		assertEquals("2023-08-05T01:02:03", result.toString());

		result = localDateTime.with(TemporalAdjusters.lastDayOfMonth());
		System.out.println(result);
		assertEquals("2023-08-31T01:02:03", result.toString());

		TemporalAdjuster temporalAdjuster = t -> t.plus(Period.ofDays(14));
		result = localDateTime.with(temporalAdjuster);
		System.out.println(result);
		assertEquals("2023-08-17T01:02:03", result.toString());

		result = localDateTime.with(t -> t.plus(Duration.ofHours(1)));
		System.out.println(result);
		assertEquals("2023-08-03T02:02:03", result.toString());
	}
2023-08-04T01:02:03
2023-08-05T01:02:03
2023-08-31T01:02:03
2023-08-17T01:02:03
2023-08-03T02:02:03

toLocalDate

LocalDateTime Functions in Java 建立一個 LocalDateTime ,取得日期。

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

toLocalTime

LocalDateTime Functions in Java 建立一個 LocalDateTime ,取得時間。

	@Test
	public void toLocalTime() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		LocalTime result = localDateTime.toLocalTime();
		System.out.println(result);
		assertEquals("01:02:03", result.toString());
	}
01:02:03

LocalDateTimeMethodsTest.java

LocalDateTime Methods in Java 新增單元測試,驗證 LocalDateTime Functions in Java 是否符合預期。

package org.ruoxue.java_147.datetime.localdatetime;

import static org.junit.Assert.*;

import java.time.Clock;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.Period;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;

import org.junit.Test;

public class LocalDateTimeMethodsTest {

	@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 get() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		int year = localDateTime.get(ChronoField.YEAR);
		System.out.println(year);
		assertEquals(2023, year);

		int month = localDateTime.get(ChronoField.MONTH_OF_YEAR);
		System.out.println(month);
		assertEquals(8, month);

		int dayOfMonth = localDateTime.get(ChronoField.DAY_OF_MONTH);
		System.out.println(dayOfMonth);
		assertEquals(3, dayOfMonth);

		int dayOfWeek = localDateTime.get(ChronoField.DAY_OF_WEEK);
		System.out.println(dayOfWeek);
		assertEquals(4, dayOfWeek);

		int dayOfYear = localDateTime.get(ChronoField.DAY_OF_YEAR);
		System.out.println(dayOfYear);
		assertEquals(215, dayOfYear);

		int hourOfDay = localDateTime.get(ChronoField.HOUR_OF_DAY);
		System.out.println(hourOfDay);
		assertEquals(1, hourOfDay);

		int minuteOfHour = localDateTime.get(ChronoField.MINUTE_OF_HOUR);
		System.out.println(minuteOfHour);
		assertEquals(2, minuteOfHour);

		int secondOfMinute = localDateTime.get(ChronoField.SECOND_OF_MINUTE);
		System.out.println(secondOfMinute);
		assertEquals(3, secondOfMinute);
	}

	@Test
	public void getValue() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		int year = localDateTime.getYear();
		System.out.println(year);
		assertEquals(2023, year);

		int month = localDateTime.getMonthValue();
		System.out.println(month);
		assertEquals(8, month);

		int dayOfMonth = localDateTime.getDayOfMonth();
		System.out.println(dayOfMonth);
		assertEquals(3, dayOfMonth);

		int dayOfWeek = localDateTime.getDayOfWeek().getValue();
		System.out.println(dayOfWeek);
		assertEquals(4, dayOfWeek);

		int dayOfYear = localDateTime.getDayOfYear();
		System.out.println(dayOfYear);
		assertEquals(215, dayOfYear);

		int hour = localDateTime.getHour();
		System.out.println(hour);
		assertEquals(1, hour);

		int minute = localDateTime.getMinute();
		System.out.println(minute);
		assertEquals(2, minute);

		int second = localDateTime.getSecond();
		System.out.println(second);
		assertEquals(3, second);
	}

	@Test
	public void with() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		LocalDateTime result = localDateTime.withYear(2024);
		int year = result.getYear();
		System.out.println(year);
		assertEquals(2024, year);

		result = localDateTime.withMonth(9);
		int month = result.getMonthValue();
		System.out.println(month);
		assertEquals(9, month);

		result = localDateTime.withDayOfMonth(4);
		int dayOfMonth = result.getDayOfMonth();
		System.out.println(dayOfMonth);
		assertEquals(4, dayOfMonth);

		result = localDateTime.withHour(2);
		int hour = result.getHour();
		System.out.println(hour);
		assertEquals(2, hour);

		result = localDateTime.withMinute(3);
		int minute = result.getMinute();
		System.out.println(minute);
		assertEquals(3, minute);

		result = localDateTime.withSecond(4);
		int second = result.getSecond();
		System.out.println(second);
		assertEquals(4, second);
	}

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

		result = localDateTime.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
		System.out.println(result);
		assertEquals("2023-08-05T01:02:03", result.toString());

		result = localDateTime.with(TemporalAdjusters.lastDayOfMonth());
		System.out.println(result);
		assertEquals("2023-08-31T01:02:03", result.toString());

		TemporalAdjuster temporalAdjuster = t -> t.plus(Period.ofDays(14));
		result = localDateTime.with(temporalAdjuster);
		System.out.println(result);
		assertEquals("2023-08-17T01:02:03", result.toString());

		result = localDateTime.with(t -> t.plus(Duration.ofHours(1)));
		System.out.println(result);
		assertEquals("2023-08-03T02:02:03", result.toString());
	}

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

	@Test
	public void toLocalTime() {
		LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3);
		LocalTime result = localDateTime.toLocalTime();
		System.out.println(result);
		assertEquals("01:02:03", result.toString());
	}
}

心得分享

LocalDateTime Functions in Java 區分了時間戳、本地日期、本地時間和帶時區的日期時間,對日期和時間進行運算更加方便,熟悉 LocalDateTime Methods in Java 這些方法的操作,提升開發效率,在應用上相當廣泛。

發佈留言