Skip to content

LocalDate

주진현 edited this page Aug 30, 2024 · 7 revisions

java.time.LocalDate 클래스는 연도(Year), 월(Month), 일(Day)을 표현하는 불변 클래스입니다.

1. Instance 생성

LocalDate 인스턴스를 생성하는 여러 가지 방법이 있습니다:

1.1 String.toLocalDate(): LocalDate

주어진 StringLocalDate로 파싱합니다. String은 라이브러리 기본 구성의 패턴을 따라야 합니다.

import io.github.harryjhin.java.time.extension.toLocalDate
import java.time.LocalDate

val date: LocalDate = "2024-01-01".toLocalDate()

String 값이 지정한 형식이 아니라면 DateTimeParseException이 발생합니다.

val date: LocalDate = "20240101".toLocalDate() // throw DateTimeParseException

1.2 String.toLocalDateOrNull(): LocalDate?

주어진 StringLocalDate로 파싱하고 예외가 발생하면 null을 반환합니다. String은 라이브러리 기본 구성의 패턴을 따라야 합니다.

import io.github.harryjhin.java.time.extension.toLocalDateOrNull
import java.time.LocalDate

val date: LocalDate? = "2024-01-01".toLocalDateOrNull()

String 값이 지정한 형식이 아니라면 null을 반환합니다.

val date: LocalDate? = "20240101".toLocalDateOrNull() // null

1.3 String.toLocalDate(String): LocalDate

주어진 String을 지정한 패턴을 사용하여 LocalDate로 파싱합니다.

import io.github.harryjhin.java.time.extension.toLocalDate
import java.time.LocalDate

val date: LocalDate = "20240101".toLocalDate("yyyyMMdd")

패턴이 올바른 형식이 아니라면 IllegalArgumentException이 발생합니다.

val date: LocalDate = "20240101".toLocalDate("ABC") // throw IllegalArgumentException

String 값이 지정한 형식이 아니라면 DateTimeParseException이 발생합니다.

val date: LocalDate = "2024-01-01".toLocalDate("yyyyMMdd") // throw DateTimeParseException

1.4 String.toLocalDateOrNull(String): LocalDate?

주어진 String을 지정한 패턴을 사용하여 LocalDate로 파싱하고 예외가 발생하면 null을 반환합니다.

import io.github.harryjhin.java.time.extension.toLocalDateOrNull
import java.time.LocalDate

val date: LocalDate? = "20240101".toLocalDateOrNull("yyyyMMdd")

패턴이 올바른 형식이 아니라면 null을 반환합니다.

val date: LocalDate? = "20240101".toLocalDateOrNull("ABC") // null

String 값이 지정한 형식이 아니라면 null을 반환합니다.

val date: LocalDate? = "2024-01-01".toLocalDateOrNull("yyyyMMdd") // null

1.5 String.toLocalDate(DateTimeFormatter): LocalDate

주어진 StringDateTimeFormatter를 사용하여 LocalDate로 파싱합니다.

import io.github.harryjhin.java.time.extension.toDateTimeFormatter
import io.github.harryjhin.java.time.extension.toLocalDate
import java.time.LocalDate
import java.time.format.DateTimeFormatter

val formatter: DateTimeFormatter = "yyyyMMdd".toDateTimeFormatter()
val date: LocalDate = "20240101".toLocalDate(formatter)

String 값이 지정한 형식이 아니라면 DateTimeParseException이 발생합니다.

val date: LocalDate = "2024-01-01".toLocalDate(formatter) // throw DateTimeParseException

1.6 String.toLocalDateOrNull(DateTimeFormatter): LocalDate?

주어진 StringDateTimeFormatter를 사용하여 LocalDate로 파싱하고 예외가 발생하면 null을 반환합니다.

import io.github.harryjhin.java.time.extension.toDateTimeFormatter
import io.github.harryjhin.java.time.extension.toLocalDateOrNull
import java.time.LocalDate
import java.time.format.DateTimeFormatter

val formatter: DateTimeFormatter = "yyyyMMdd".toDateTimeFormatter()
val date: LocalDate? = "20240101".toLocalDateOrNull(formatter)

String 값이 지정한 형식이 아니라면 null을 반환합니다.

val date: LocalDate? = "2024-01-01".toLocalDateOrNull(formatter) // null

2 기간

LocalDate 인스턴스는 연도, 월, 일 정보를 가지고 있으므로, Period 인스턴스를 만들 수 있습니다.

지원하는 확장 프로퍼티는 다음과 같습니다:

2.1 LocalDate.years: Period

LocalDate 인스턴스에서 연(year)을 Period로 가져옵니다.

import io.github.harryjhin.java.time.extension.years
import java.time.LocalDate
import java.time.Period

val date: LocalDate = "2024-01-01".toLocalDate()
val period: Period = date.years // P2024Y

2.2 LocalDate.months: Period

LocalDate 인스턴스에서 월(month)을 Period로 가져옵니다.

import io.github.harryjhin.java.time.extension.months
import java.time.LocalDate
import java.time.Period

val date: LocalDate = "2024-01-01".toLocalDate()
val period: Period = date.months // P1M

2.3 LocalDate.days: Period

LocalDate 인스턴스에서 일(day)을 Period로 가져옵니다.

import io.github.harryjhin.java.time.extension.days
import java.time.LocalDate
import java.time.Period

val date: LocalDate = "2024-01-01".toLocalDate()
val period: Period = date.days // P1D

3 연산

LocalDate 인스턴스에서 지원하는 연산자는 다음과 같습니다.

3.1 LocalDate.plus(TemporalAmount): LocalDate

LocalDate 인스턴스에 Period를 더하려면 plus(+) 연산자를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.days
import java.time.LocalDate

var date: LocalDate = "2024-01-01".toLocalDate()
date += 1.days // 2024-01-02

3.2 LocalDate.minus(TemporalAmount): LocalDate

LocalDate 인스턴스에서 Period를 빼려면 minus(-) 연산자를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.months
import java.time.LocalDate

var date: LocalDate = "2024-01-01".toLocalDate()
date -= 1.months // 2023-12-01

4 분해

LocalDate는 연, 월, 일 정보를 포함하고 있습니다. 따라서 다른 java.time 클래스로 변환할 수 있습니다.

지원하는 확장 함수는 다음과 같습니다:

4.1 LocalDate.toYear(): Year

LocalDate 인스턴스에서 연(year)을 Year 인스턴스로 변환합니다.

import io.github.harryjhin.java.time.extension.toLocalDate
import io.github.harryjhin.java.time.extension.toYear
import java.time.LocalDate
import java.time.Year

val date: LocalDate = "2024-01-01".toLocalDate()
val year: Year = date.toYear() // 2024

4.2 LocalDate.toMonth(): Month

LocalDate 인스턴스에서 월(month)을 Month 인스턴스로 변환합니다.

import io.github.harryjhin.java.time.extension.toLocalDate
import io.github.harryjhin.java.time.extension.toMonth
import java.time.LocalDate
import java.time.Month

val date: LocalDate = "2024-01-01".toLocalDate()
val month: Month = date.toMonth() // JANUARY

4.3 LocalDate.toYearMonth(): YearMonth

LocalDate 인스턴스에서 연(year)과 월(month)을 YearMonth 인스턴스로 변환합니다.

import io.github.harryjhin.java.time.extension.toLocalDate
import io.github.harryjhin.java.time.extension.toYearMonth
import java.time.LocalDate
import java.time.YearMonth

val date: LocalDate = "2024-01-01".toLocalDate()
val yearMonth: YearMonth = date.toYearMonth() // 2024-01

4.4 LocalDate.toMonthDay(): MonthDay

LocalDate 인스턴스에서 월(month)과 일(day)을 MonthDay 인스턴스로 변환합니다.

import io.github.harryjhin.java.time.extension.toLocalDate
import io.github.harryjhin.java.time.extension.toMonthDay
import java.time.LocalDate
import java.time.MonthDay

val date: LocalDate = "2024-01-01".toLocalDate()
val monthDay: MonthDay = date.toMonthDay() // --01-01

4.5 LocalDate.toDayOfWeek(): DayOfWeek

LocalDate 인스턴스에서 요일(dayOfWeek)을 DayOfWeek 인스턴스로 변환합니다.

import io.github.harryjhin.java.time.extension.toLocalDate
import io.github.harryjhin.java.time.extension.toDayOfWeek
import java.time.LocalDate
import java.time.DayOfWeek

val date: LocalDate = "2024-01-01".toLocalDate()
val dayOfWeek: DayOfWeek = date.toDayOfWeek() // TUESDAY

5 결합 및 비교

LocalDate 인스턴스에서 지원하는 중위 함수는 다음과 같습니다:

5.1 LocalDate.at(LocalTime): LocalDateTime

LocalDate 인스턴스와 LocalTime 인스턴스를 결합하여 LocalDateTime 인스턴스를 생성합니다.

import io.github.harryjhin.java.time.extension.at
import io.github.harryjhin.java.time.extension.toLocalDate
import io.github.harryjhin.java.time.extension.toLocalTime
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime

val date: LocalDate = "2024-01-01".toLocalDate()
val time: LocalTime = "12:00".toLocalTime()

val dateTime: LocalDateTime = date at time // 2024-01-01T12:00

5.2 LocalDate.between(LocalDate): Period

LocalDate 인스턴스의 날짜 차이를 계산합니다.

import io.github.harryjhin.java.time.extension.between
import io.github.harryjhin.java.time.extension.toLocalDate
import java.time.LocalDate
import java.time.Period

val start: LocalDate = "2024-01-01".toLocalDate()
val end: LocalDate = "2024-01-10".toLocalDate()

val period: Period = start between end // P9D

6 포맷

LocalDate 인스턴스를 String으로 포매팅할 때 사용할 수 있는 확장 함수는 다음과 같습니다:

6.1 LocalDate.toString(String): String

LocalDate 인스턴스를 지정한 패턴을 사용하여 String으로 변환합니다.

import io.github.harryjhin.java.time.extension.toLocalDate
import io.github.harryjhin.java.time.extension.toString
import java.time.LocalDate

val date: LocalDate = "2024-01-01".toLocalDate()
val string: String = date.toString("yyyyMMdd") // 20240101

6.2 LocalDate.toString(DateTimeFormatter): String

LocalDate 인스턴스를 DateTimeFormatter를 사용하여 String으로 변환합니다.

import io.github.harryjhin.java.time.extension.toLocalDate
import io.github.harryjhin.java.time.extension.toString
import java.time.LocalDate
import java.time.format.DateTimeFormatter

val date: LocalDate = "2024-01-01".toLocalDate()
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd")

val string: String = date.toString(formatter) // 20240101