Skip to content

LocalDateTime

주진현 edited this page Aug 28, 2024 · 9 revisions

java.time.LocalDateTime 클래스는 날짜와 시간을 함께 표현하는 불변 클래스입니다.

이 페이지에서는 java-time-extensions 라이브러리에서 어떻게 확장 프로퍼티, 확장 함수, 중위 함수를 사용할 수 있는지 설명합니다.

1 instance 생성

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

1.1 Long.toLocalDateTime(): LocalDateTime

LongLocalDateTime으로 변환하려면 toLocalDateTime() 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime

val dateTime: LocalDateTime = System.currentTimeMillis().toLocalDateTime()

Long 값은 반드시 Unix Epoch Time(1970-01-01T00:00:00Z) 이후의 시간(밀리초 단위)을 나타내야 합니다.

1.2 String.toLocalDateTime(): LocalDateTime?

StringLocalDateTime으로 변환하려면 toLocalDateTime() 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()

String 값은 반드시 yyyy-MM-dd'T'HH:mm:ss 형식을 따라야 합니다. 그렇지 않으면 DateTimeParseException이 발생합니다.

예외를 던지는 대신 null을 반환하려면 toLocalDateTimeOrNull() 확장 함수를 사용하십시오.

1.3 String.toLocalDateTimeOrNull(): LocalDateTime?

StringLocalDateTime으로 변환하면서 예외가 발생할 경우 null을 반환하려면 toLocalDateTimeOrNull() 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTimeOrNull
import java.time.LocalDateTime

val dateTime: LocalDateTime? = "2024-01-01-01".toLocalDateTimeOrNull() // null

만약 String이 일반적인 yyyy-MM-dd'T'HH:mm:ss 형식이 아니라면 null을 반환합니다.

null을 반환하는 대신 형식을 지정하려면 toLocalDateTime(String) 확장 함수를 사용하십시오.

1.4 String.toLocalDateTime(String): LocalDateTime

String을 지정한 패턴을 사용하여 LocalDateTime으로 변환하려면 toLocalDateTime(String) 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime

val dateTime: LocalDateTime = "24/01/01 12:00:00".toLocalDateTime("yy/MM/dd HH:mm:ss")

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

예외를 던지는 대신 null을 반환하려면 toLocalDateTimeOrNull(String) 확장 함수를 사용하십시오.

1.5 String.toLocalDateTimeOrNull(String): LocalDateTime?

String을 지정한 패턴을 사용하여 LocalDateTime으로 변환하면서 예외가 발생할 경우 null을 반환하려면 toLocalDateTimeOrNull(String) 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTimeOrNull
import java.time.LocalDateTime

val dateTime: LocalDateTime? = "24/01/01 12:00:00".toLocalDateTimeOrNull("yy/MM/dd HH:mm:ss")

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

형식을 지정할 때 String 대신 DateTimeFormatter를 사용하려면 toLocalDateTime(DateTimeFormatter) 확장 함수를 사용하십시오.

1.6 String.toLocalDateTime(DateTimeFormatter): LocalDateTime

StringDateTimeFormatter를 사용하여 LocalDateTime으로 변환하려면 toLocalDateTime(DateTimeFormatter) 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yy/MM/dd HH:mm:ss")
val dateTime: LocalDateTime = "24/01/01 12:00:00".toLocalDateTime(formatter)

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

예외를 던지는 대신 null을 반환하려면 toLocalDateTimeOrNull(DateTimeFormatter) 확장 함수를 사용하십시오.

1.7 String.toLocalDateTimeOrNull(DateTimeFormatter): LocalDateTime?

StringDateTimeFormatter를 사용하여 LocalDateTime으로 변환하면서 예외가 발생할 경우 null을 반환하려면 toLocalDateTimeOrNull(DateTimeFormatter) 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTimeOrNull
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yy/MM/dd HH:mm:ss")
val dateTime: LocalDateTime? = "24/01/01 12:00:00".toLocalDateTimeOrNull(formatter)

2 LocalDateTime to TemporalAmount

LocalDateTime 인스턴스는 날짜와 시간 정보를 포함하고 있습니다. 따라서 날짜는 Period, 시간은 Duration으로 변환할 수 있습니다.

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

2.1 LocalDateTime.years: Period

LocalDateTime 인스턴스에서 연도 값을 가져오려면 years 확장 프로퍼티를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.years
import java.time.LocalDateTime
import java.time.Period

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val period: Period = dateTime.years // P2024Y

2.2 LocalDateTime.months: Period

LocalDateTime 인스턴스에서 월 값을 가져오려면 months 확장 프로퍼티를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.months
import java.time.LocalDateTime
import java.time.Period

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val period: Period = dateTime.months // P1M

2.3 LocalDateTime.days: Period

LocalDateTime 인스턴스에서 일 값을 가져오려면 days 확장 프로퍼티를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.days
import java.time.LocalDateTime
import java.time.Period

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val period: Period = dateTime.days // P1D

2.4 LocalDateTime.hours: Duration

LocalDateTime 인스턴스에서 시간 값을 가져오려면 hours 확장 프로퍼티를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.hours
import java.time.LocalDateTime
import java.time.Duration

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val duration: Duration = dateTime.hours // PT12H

2.5 LocalDateTime.minutes: Duration

LocalDateTime 인스턴스에서 분 값을 가져오려면 minutes 확장 프로퍼티를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.minutes
import java.time.LocalDateTime
import java.time.Duration

val dateTime: LocalDateTime = "2024-01-01T12:34:56".toLocalDateTime()
val duration: Duration = dateTime.minutes // PT34M

2.6 LocalDateTime.seconds: Duration

LocalDateTime 인스턴스에서 초 값을 가져오려면 seconds 확장 프로퍼티를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.seconds
import java.time.LocalDateTime
import java.time.Duration

val dateTime: LocalDateTime = "2024-01-01T12:34:56".toLocalDateTime()
val duration: Duration = dateTime.seconds // PT56S

2.7 LocalDateTime.milliseconds: Duration

LocalDateTime 인스턴스에서 나노초 값을 밀리초 단위까지 가져오려면 milliseconds 확장 프로퍼티를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.milliseconds
import java.time.LocalDateTime
import java.time.Duration

val dateTime: LocalDateTime = "2024-01-01T12:34:56.123456789".toLocalDateTime("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS")
val duration: Duration = dateTime.milliseconds // PT0.123S

2.8 LocalDateTime.microseconds: Duration

LocalDateTime 인스턴스에서 나노초 값을 마이크로초 단위까지 가져오려면 microseconds 확장 프로퍼티를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.microseconds
import java.time.LocalDateTime
import java.time.Duration

val dateTime: LocalDateTime = "2024-01-01T12:34:56.123456789".toLocalDateTime("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS")
val duration: Duration = dateTime.microseconds // PT0.123456S

2.9 LocalDateTime.nanoseconds: Duration

LocalDateTime 인스턴스에서 나노초 값을 나노초 단위까지 가져오려면 nanoseconds 확장 프로퍼티를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.nanoseconds
import java.time.LocalDateTime
import java.time.Duration

val dateTime: LocalDateTime = "2024-01-01T12:34:56.123456789".toLocalDateTime("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS")
val duration: Duration = dateTime.nanoseconds // PT0.123456789S

3 연산

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

3.1 LocalDateTime.plus(TemporalAmount)

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

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

var dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
dateTime += 1.days // 2024-01-02T12:00:00

3.2 LocalDateTime.minus(TemporalAmount)

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

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.hours
import java.time.LocalDateTime

var dateTime: LocalDateTime = "2024-01-02T12:00:00".toLocalDateTime()
dateTime -= 1.hours // 2024-01-02T11:00:00

4 LocalDateTime to java.time.*

LocalDateTime 인스턴스에서 다른 java.time 클래스로 변환합니다.

지원하는 타입은 다음과 같습니다:

4.1 LocalDateTime.toYear(): Year

LocalDateTime 인스턴스에서 연도 값만 가져와서 Year 인스턴스로 변환하려면 toYear() 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.toYear
import java.time.LocalDateTime
import java.time.Year

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val year: Year = dateTime.toYear() // 2024

4.2 LocalDateTime.toMonth(): Month

LocalDateTime 인스턴스에서 월 값만 가져와서 Month 인스턴스로 변환하려면 toMonth() 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.toMonth
import java.time.LocalDateTime
import java.time.Month

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val month: Month = dateTime.toMonth() // JANUARY

4.3 LocalDateTime.toYearMonth(): YearMonth

LocalDateTime 인스턴스에서 연도와 월 값을 가져와서 YearMonth 인스턴스로 변환하려면 toYearMonth() 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.toYearMonth
import java.time.LocalDateTime
import java.time.YearMonth

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val yearMonth: YearMonth = dateTime.toYearMonth() // 2024-01

4.4 LocalDateTime.toMonthDay(): MonthDay

LocalDateTime 인스턴스에서 월과 일 값을 가져와서 MonthDay 인스턴스로 변환하려면 toMonthDay() 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.toMonthDay
import java.time.LocalDateTime
import java.time.MonthDay

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val monthDay: MonthDay = dateTime.toMonthDay() // --01-01

4.5 LocalDateTime.toDayOfWeek(): DayOfWeek

LocalDateTime 인스턴스에서 요일 값을 가져와서 DayOfWeek 인스턴스로 변환하려면 toDayOfWeek() 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toLocalDateTime
import io.github.harryjhin.java.time.extension.toDayOfWeek
import java.time.LocalDateTime
import java.time.DayOfWeek

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val dayOfWeek: DayOfWeek = dateTime.toDayOfWeek() // TUESDAY

5 중위 함수

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

5.1 LocalDateTime.at(ZoneOffset): OffsetDateTime

LocalDateTimeZoneOffset을 결합하여 OffsetDateTime로 변환하려면 at 중위 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.at
import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime
import java.time.OffsetDateTime
import java.time.ZoneOffset

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val zoneOffset: ZoneOffset = ZoneOffset.ofHours(9)
val offsetDateTime: OffsetDateTime = dateTime at zoneOffset // 2024-01-01T12:00+09:00

5.2 LocalDateTime.at(ZoneId): ZonedDateTime

LocalDateTimeZoneId를 결합하여 ZonedDateTime로 변환하려면 at 중위 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.at
import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.ZonedDateTime

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val zonedDateTime: ZonedDateTime = dateTime at ZoneId.of("Asia/Seoul") // 2024-01-01T12:00+09:00[Asia/Seoul]

5.3 LocalDateTime.at(String): ZonedDateTime

LocalDateTimeString(zoneId 문자열)을 결합하여 ZonedDateTime로 변환하려면 at 중위 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.at
import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime
import java.time.ZonedDateTime

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val zonedDateTime: ZonedDateTime = dateTime at "Asia/Seoul" // 2024-01-01T12:00+09:00[Asia/Seoul]

5.4 LocalDateTime.between(LocalDateTime): Duration

LocalDateTime 인스턴스 사이의 차이를 Duration으로 계산하려면 between 중위 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.between
import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime
import java.time.Duration

val startDateTIme: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val endDateTIme: LocalDateTime = "2024-01-02T13:00:00".toLocalDateTime()

val duration: Duration = startDateTIme between endDateTIme // PT25H

6 LocalDateTime to String

LocalDateTime 인스턴스를 String으로 변환합니다. 지원하는 확장 함수는 다음과 같습니다:

6.1 LocalDateTime.toString(String): String

LocalDateTime 인스턴스를 지정한 형식의 String으로 변환하려면 toString 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toString
import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val str: String = dateTime.toString("yyyyMMdd HH:mm:ss") // 20240101 12:00:00

6.2 LocalDateTime.toString(DateTimeFormatter): String

LocalDateTime 인스턴스를 DateTimeFormatter로 변환하려면 toString 확장 함수를 사용하십시오.

import io.github.harryjhin.java.time.extension.toString
import io.github.harryjhin.java.time.extension.toLocalDateTime
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

val dateTime: LocalDateTime = "2024-01-01T12:00:00".toLocalDateTime()
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
val str: String = dateTime.toString(formatter) // 2024/01/01 12:00:00

Clone this wiki locally