Skip to content

OffsetDateTime

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

[java.time.OffsetDateTime]은 날짜, 시간, 시간대 정보를 포함하는 불변 클래스입니다.

1 Instance 생성

OffsetDateTime 인스턴스를 생성하는 방법은 다음과 같습니다:

1.1 String.toOffsetDateTime(): OffsetDateTime

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

import io.github.harryjhin.java.time.extension.toOffsetDateTime
import java.time.OffsetDateTime

val offsetDateTime: OffsetDateTime = "2024-01-01T00:00:00+09:00".toOffsetDateTime()

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

1.2 String.toOffsetDateTimeOrNull(): OffsetDateTime?

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

import io.github.harryjhin.java.time.extension.toOffsetDateTimeOrNull
import java.time.OffsetDateTime

val offsetDateTime: OffsetDateTime? = "2024-01-01T00:00:00+09:00".toOffsetDateTimeOrNull()

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

val offsetDateTime: OffsetDateTime? = "2024-01-01".toOffsetDateTimeOrNull() // null

1.3 String.toOffsetDateTime(String): OffsetDateTime

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

import io.github.harryjhin.java.time.extension.toOffsetDateTime
import java.time.OffsetDateTime

val offsetDateTime: OffsetDateTime = "24-01-01T00:00:00+09:00".toOffsetDateTime("yy-MM-dd'T'HH:mm:ssXXX")

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

val offsetDateTime: OffsetDateTime = "2024-01-01".toOffsetDateTime("ABC") // throw IllegalArgumentException

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

val offsetDateTime: OffsetDateTime = "24-01-01".toOffsetDateTime("yy-MM-dd'T'HH:mm:ssXXX") // throw DateTimeParseException

1.4 String.toOffsetDateTimeOrNull(String): OffsetDateTime?

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

import io.github.harryjhin.java.time.extension.toOffsetDateTimeOrNull
import java.time.OffsetDateTime

val offsetDateTime: OffsetDateTime? = "24-01-01T00:00:00+09:00".toOffsetDateTimeOrNull("yy-MM-dd'T'HH:mm:ssXXX")

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

val offsetDateTime: OffsetDateTime? = "2024-01-01".toOffsetDateTimeOrNull("ABC") // null

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

val offsetDateTime: OffsetDateTime? = "24-01-01".toOffsetDateTimeOrNull("yy-MM-dd'T'HH:mm:ssXXX") // null

1.5 String.toOffsetDateTime(DateTimeFormatter): OffsetDateTime

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

import io.github.harryjhin.java.time.extension.toDateTimeFormatter
import io.github.harryjhin.java.time.extension.toOffsetDateTime
import java.time.OffsetDateTime
import java.time.format.DateTimeFormatter

val formatter: DateTimeFormatter = "yy-MM-dd'T'HH:mm:ssXXX".toDateTimeFormatter()

val offsetDateTime: OffsetDateTime = "24-01-01T00:00:00+09:00".toOffsetDateTime(formatter)

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

val offsetDateTime: OffsetDateTime = "2024-01-01".toOffsetDateTime(formatter) // throw DateTimeParseException

1.6 String.toOffsetDateTimeOrNull(DateTimeFormatter): OffsetDateTime?

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

import io.github.harryjhin.java.time.extension.toDateTimeFormatter
import io.github.harryjhin.java.time.extension.toOffsetDateTimeOrNull
import java.time.OffsetDateTime
import java.time.format.DateTimeFormatter

val formatter: DateTimeFormatter = "yy-MM-dd'T'HH:mm:ssXXX".toDateTimeFormatter()

val offsetDateTime: OffsetDateTime? = "24-01-01T00:00:00+09:00".toOffsetDateTimeOrNull(formatter)

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

val offsetDateTime: OffsetDateTime? = "2024-01-01".toOffsetDateTimeOrNull(formatter) // null

2 기간

OffsetDateTime 인스턴스는 연, 월, 일, 시, 분, 초, 나노초 정보를 가지고 있으므로, 이 정보를 PeriodDuration으로 가져올 수 있습니다:

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

2.1 OffsetDateTime.years: Period

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

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

val offsetDateTime: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
val period: Period = offsetDateTime.years // P2024Y

2.2 OffsetDateTime.months: Period

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

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

val offsetDateTime: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
val period: Period = offsetDateTime.months // P1M

2.3 OffsetDateTime.days: Period

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

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

val offsetDateTime: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
val period: Period = offsetDateTime.days // P1D

2.4 OffsetDateTime.hours: Duration

OffsetDateTime 인스턴스에서 시간(hour)을 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.hours
import java.time.OffsetDateTime
import java.time.Duration

val offsetDateTime: OffsetDateTime = "2024-01-01T12:34+09:00".toOffsetDateTime()
val duration: Duration = offsetDateTime.hours // PT12H

2.5 OffsetDateTime.minutes: Duration

OffsetDateTime 인스턴스에서 분(minute)을 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.minutes
import java.time.OffsetDateTime
import java.time.Duration

val offsetDateTime: OffsetDateTime = "2024-01-01T12:34+09:00".toOffsetDateTime()
val duration: Duration = offsetDateTime.minutes // PT34M

2.6 OffsetDateTime.seconds: Duration

OffsetDateTime 인스턴스에서 초(second)을 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.seconds
import java.time.OffsetDateTime
import java.time.Duration

val offsetDateTime: OffsetDateTime = "2024-01-01T12:34:56+09:00".toOffsetDateTime()
val duration: Duration = offsetDateTime.seconds // PT56S

2.7 OffsetDateTime.milliseconds: Duration

OffsetDateTime 인스턴스에서 나노초(nano)을 밀리초(milli)까지 절삭하여 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.milliseconds
import java.time.OffsetDateTime
import java.time.Duration

val offsetDateTime: OffsetDateTime = "2024-01-01T12:34:56.123+09:00".toOffsetDateTime()
val duration: Duration = offsetDateTime.milliseconds // PT0.123S

2.8 OffsetDateTime.microseconds: Duration

OffsetDateTime 인스턴스에서 나노초(nano)을 마이크로초(micro)까지 절삭하여 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.microseconds
import java.time.OffsetDateTime
import java.time.Duration

val offsetDateTime: OffsetDateTime = "2024-01-01T12:34:56.123456+09:00".toOffsetDateTime("yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX")
val duration: Duration = offsetDateTime.microseconds // PT0.123456S

2.9 OffsetDateTime.nanoseconds: Duration

OffsetDateTime 인스턴스에서 나노초(nano)을 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.nanoseconds
import java.time.OffsetDateTime
import java.time.Duration

val offsetDateTime: OffsetDateTime = "2024-01-01T12:34:56.123456789+09:00".toOffsetDateTime("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSXXX")
val duration: Duration = offsetDateTime.nanoseconds // PT0.123456789S

3 연산

3.1 OffsetDateTime.plus(TemporalAmount): OffsetDateTime

OffsetDateTime 인스턴스에 TemporalAmount를 더합니다.

import io.github.harryjhin.java.time.extension.toOffsetDateTime
import io.github.harryjhin.java.time.extension.years
import java.time.OffsetDateTime

var offsetDateTime: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
offsetDateTime += 1.years // 2025-01-01T00:00+09:00

3.2 OffsetDateTime.minus(TemporalAmount): OffsetDateTime

OffsetDateTime 인스턴스에서 TemporalAmount를 뺍니다.

import io.github.harryjhin.java.time.extension.toOffsetDateTime
import io.github.harryjhin.java.time.extension.years
import java.time.OffsetDateTime

var offsetDateTime: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
offsetDateTime -= 1.years // 2023-01-01T00:00+09:00

4 분해

OffsetDateTime는 연, 월, 일, 시, 분, 초, 나노초 정보를 포함하고 있습니다. 따라서 다른 java.time 클래스로 분해할 수 있습니다.

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

4.1 OffsetDateTime.toYear(): Year

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

import io.github.harryjhin.java.time.extension.toOffsetDateTime
import io.github.harryjhin.java.time.extension.toYear
import java.time.OffsetDateTime
import java.time.Year

val offsetDateTime: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
val year: Year = offsetDateTime.toYear() // 2024

4.2 OffsetDateTime.toMonth(): Month

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

import io.github.harryjhin.java.time.extension.toMonth
import io.github.harryjhin.java.time.extension.toOffsetDateTime
import java.time.OffsetDateTime
import java.time.Month

val offsetDateTime: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
val month: Month = offsetDateTime.toMonth() // JANUARY

4.3 OffsetDateTime.toYearMonth(): YearMonth

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

import io.github.harryjhin.java.time.extension.toOffsetDateTime
import io.github.harryjhin.java.time.extension.toYearMonth
import java.time.OffsetDateTime
import java.time.YearMonth

val offsetDateTime: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
val yearMonth: YearMonth = offsetDateTime.toYearMonth() // 2024-01

4.4 OffsetDateTime.toMonthDay(): MonthDay

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

import io.github.harryjhin.java.time.extension.toOffsetDateTime
import io.github.harryjhin.java.time.extension.toMonthDay
import java.time.OffsetDateTime
import java.time.MonthDay

val offsetDateTime: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
val monthDay: MonthDay = offsetDateTime.toMonthDay() // --01-01

5 비교

5.1 OffsetDateTime.between(OffsetDateTime): Duration

OffsetDateTime 인스턴스 사이의 시간 간격을 계산하여 Duration으로 반환합니다.

import io.github.harryjhin.java.time.extension.between
import java.time.OffsetDateTime
import java.time.Duration

val start: OffsetDateTime = "2024-01-01T00:00+09:00".toOffsetDateTime()
val end: OffsetDateTime = "2024-01-02T00:00+09:00".toOffsetDateTime()
val duration: Duration = start between end // PT24H

6 포맷

6.1 OffsetDateTime.toString(String): String

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

import io.github.harryjhin.java.time.extension.toString
import java.time.OffsetDateTime

val offsetDateTime: OffsetDateTime = "2024-01-01T00:00:00+09:00".toOffsetDateTime()
val string: String = offsetDateTime.toString("yy-MM-dd'T'HH:mm:ssXXX") // 24-01-01T00:00:00+09:00

6.2 OffsetDateTime.toString(DateTimeFormatter): String

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

import io.github.harryjhin.java.time.extension.toString
import io.github.harryjhin.java.time.extension.toDateTimeFormatter
import java.time.OffsetDateTime
import java.time.format.DateTimeFormatter

val formatter: DateTimeFormatter = "yy-MM-dd'T'HH:mm:ssXXX".toDateTimeFormatter()
val offsetDateTime: OffsetDateTime = "2024-01-01T00:00:00+09:00".toOffsetDateTime()
val string: String = offsetDateTime.toString(formatter) // 24-01-01T00:00:00+09:00

Clone this wiki locally