Skip to content

OffsetTime

주진현 edited this page Aug 30, 2024 · 1 revision

java.time.OffsetTime는 시간 및 시간대 오프셋을 나타내는 불변 클래스입니다.

1 Instance 생성

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

1.1 String.toOffsetTime(): OffsetTime

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

import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "12:34:56+09:00".toOffsetTime()

String 값이 기본 형식이 아닌 경우 DateTimeParseException이 발생합니다.

val offsetTime: Offset = "123456+0900".toOffsetTime() // throw DateTimeParseException

1.2 String.toOffsetTimeOrNull(): OffsetTime?

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

import io.github.harryjhin.java.time.extension.toOffsetTimeOrNull
import java.time.OffsetTime

val offsetTime: OffsetTime? = "12:34:56+09:00".toOffsetTimeOrNull()

String 값이 기본 형식이 아닌 경우 null을 반환합니다.

val offsetTime: OffsetTime? = "123456+0900".toOffsetTimeOrNull() // null

1.3 String.toOffsetTime(String): OffsetTime

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

import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "123456+0900".toOffsetTime("HHmmssZ")

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

val offsetTime: OffsetTime = "123456+0900".toOffsetTime("ABC") // throw IllegalArgumentException

String 값이 지정한 패턴과 일치하지 않는 경우 DateTimeParseException이 발생합니다.

val offsetTime: OffsetTime = "123456+0900".toOffsetTime("HHmmss") // throw DateTimeParseException

1.4 String.toOffsetTimeOrNull(String): OffsetTime?

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

import io.github.harryjhin.java.time.extension.toOffsetTimeOrNull
import java.time.OffsetTime

val offsetTime: OffsetTime? = "123456+0900".toOffsetTimeOrNull("HHmmssZ")

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

val offsetTime: OffsetTime? = "123456+0900".toOffsetTimeOrNull("ABC") // null

String 값이 지정한 패턴과 일치하지 않는 경우 null을 반환합니다.

val offsetTime: OffsetTime? = "123456+0900".toOffsetTimeOrNull("HHmmss") // null

1.5 String.toOffsetTime(DateTimeFormatter): OffsetTime

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

import io.github.harryjhin.java.time.extension.toDateTimeFormatter
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime
import java.time.format.DateTimeFormatter

val formatter: DateTimeFormatter = "HHmmssZ".toDateTimeFormatter()
val offsetTime: OffsetTime = "123456+0900".toOffsetTime(formatter)

String 값이 지정한 형식과 일치하지 않는 경우 DateTimeParseException이 발생합니다.

val formatter: DateTimeFormatter = "HHmmss".toDateTimeFormatter()
val offsetTime: OffsetTime = "123456+0900".toOffsetTime(formatter) // throw DateTimeParseException

1.6 String.toOffsetTimeOrNull(DateTimeFormatter): OffsetTime?

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

import io.github.harryjhin.java.time.extension.toDateTimeFormatter
import io.github.harryjhin.java.time.extension.toOffsetTimeOrNull
import java.time.OffsetTime
import java.time.format.DateTimeFormatter

val formatter: DateTimeFormatter = "HHmmssZ".toDateTimeFormatter()
val offsetTime: OffsetTime? = "123456+0900".toOffsetTimeOrNull(formatter)

String 값이 지정한 형식과 일치하지 않는 경우 null을 반환합니다.

val formatter: DateTimeFormatter = "HHmmss".toDateTimeFormatter()
val offsetTime: OffsetTime? = "123456+0900".toOffsetTimeOrNull(formatter) // null

2 기간

OffsetTime은 시간과 시, 분, 초, 나노초 정보를 가지고 있으므로, 이 정보를 Duration으로 가져올 수 있습니다.

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

2.1 OffsetTime.hours: Duration

OffsetTime 인스턴스에서 시(hour)를 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.hours
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "12:34:56+09:00".toOffsetTime()
val hours: Duration = offsetTime.hours // PT12H

2.2 OffsetTime.minutes: Duration

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

import io.github.harryjhin.java.time.extension.minutes
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "12:34:56+09:00".toOffsetTime()
val minutes: Duration = offsetTime.minutes // PT34M

2.3 OffsetTime.seconds: Duration

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

import io.github.harryjhin.java.time.extension.seconds
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "12:34:56+09:00".toOffsetTime()
val seconds: Duration = offsetTime.seconds // PT56S

2.4 OffsetTime.milliseceonds: Duration

OffsetTime 인스턴스에서 나노(nano)초를 밀리(milli)초까지 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.milliseconds
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "12:34:56.132465789+09:00".toOffsetTime("HH:mm:ss.SSSSSSSSSXXX")
val milliseconds: Duration = offsetTime.milliseconds // PT0.132S

2.5 OffsetTime.microseconds: Duration

OffsetTime 인스턴스에서 나노(nano)초를 마이크로(micro)초까지 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.microseconds
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "12:34:56.132465789+09:00".toOffsetTime("HH:mm:ss.SSSSSSSSSXXX")
val microseconds: Duration = offsetTime.microseconds // PT0.132465S

2.6 OffsetTime.nanoseconds: Duration

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

import io.github.harryjhin.java.time.extension.nanoseconds
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "12:34:56.132465789+09:00".toOffsetTime("HH:mm:ss.SSSSSSSSSXXX")
val nanoseconds: Duration = offsetTime.nanoseconds // PT0.132465789S

3 연산

OffsetTime 인스턴스에서 지원하는 연산은 다음과 같습니다:

3.1 OffsetTime.plus(TemporalAmount): OffsetTime

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

import io.github.harryjhin.java.time.extension.hours
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

var offsetTime: OffsetTime = "12:34:56+09:00".toOffsetTime()
offsetTime += 1.hours // 13:34:56+09:00

3.2 OffsetTime.minus(TemporalAmount): OffsetTime

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

import io.github.harryjhin.java.time.extension.hours
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

var offsetTime: OffsetTime = "12:34:56+09:00".toOffsetTime()
offsetTime -= 1.hours // 11:34:56+09:00

4 결합

4.1 OffsetTime.at(LocalDate): OffsetDateTime

OffsetTime 인스턴스와 LocalDate 인스턴스를 결합하여 OffsetDateTime 인스턴스를 생성합니다.

import io.github.harryjhin.java.time.extension.at
import io.github.harryjhin.java.time.extension.toLocalDate
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.LocalDate
import java.time.OffsetDateTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "12:34:56+09:00".toOffsetTime()
val date: LocalDate = "2024-12-31".toLocalDate()
val offsetDateTime: OffsetDateTime = offsetTime at date // 2024-12-31T12:34:56+09:00

5 비교

5.1 OffsetTime.between(OffsetTime): Duration

OffsetTime 인스턴스 사이의 시간 간격을 Duration으로 가져옵니다.

import io.github.harryjhin.java.time.extension.between
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.Duration
import java.time.OffsetTime

val start: OffsetTime = "12:34:56+09:00".toOffsetTime()
val end: OffsetTime = "13:34:56+09:00".toOffsetTime()

val duration: Duration = start between end // PT1H

6 포맷

6.1 OffsetTime.toString(String): String

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

import io.github.harryjhin.java.time.extension.toString
import io.github.harryjhin.java.time.extension.toOffsetTime
import java.time.OffsetTime

val offsetTime: OffsetTime = "12:34:56+09:00".toOffsetTime()
val string: String = offsetTime.toString("HHmmssZ") // 123456+0900

6.2 OffsetTime.toString(DateTimeFormatter): String

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

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

val offsetTime: OffsetTime = "12:34:56+09:00".toOffsetTime()
val formatter: DateTimeFormatter = "HHmmssZ".toDateTimeFormatter()
val string: String = offsetTime.toString(formatter) // 123456+0900