Kotlin LocalDateTime
1. LocalDateTime now()
현재 로컬 컴퓨터의 날짜와 시간을 반환합니다. 타입은 LocalDateTime 입니다.
val nowDateTime = LocalDateTime.now();
// Result: 2023-04-24T21:00:56.043102
현재 결과는 로컬 컴퓨터 시간(Aisa/seoul)로 설정되어 있지만, 유동적으로 변경할 수 있습니다.바로, ZoneId
를 사용하는 방법이 있습니다.
val nowDateTime = LocalDateTime.now(ZoneId.of("America/Chicago"))
// Result: 2023-04-24T07:28:19.598154
아래 이미지는 지원하는 ZoneId 목록입니다. (코틀린 기준으로 Asia/seoul은 없군요..)
2. LocalDateTime 생성
LocalDateTime에서 직접 시간을 생성하여 인스턴스를 생성할 수 있습니다.초, 밀리세컨드 단위는 생략할 수 있습니다.
val localDateTime = LocalDateTime.of(2023, 1, 1, 12, 20)
// Result: 2023-01-01T12:20
val localDateTime = LocalDateTime.of(2023, 1, 1, 12, 20, 30)
// Result: 2023-01-01T12:20:30
val localDateTime = LocalDateTime.of(2023, 1, 1, 12, 20, 30, 223)
// 2023-01-01T12:20:30.000000223
또한, 월(month)는 Enum 타입을 이용해서 생성할 수도 있습니다.Month
enum 타입을 사용하는데, 1월부터 12월까지 제공하고 있습니다.
val localDateTime = LocalDateTime.of(2023, Month.JANUARY, 1, 12, 20)
// Result: 2023-01-01T12:20
3. Formatter를 사용하여 원하는 출력사용
DateTimeFormatter.ofPattern()
을 사용하여 LocalDateTime을 원하는 시간 포맷으로 변경하여 사용할 수 있습니다.
- yyyy: 년도
- MM: 월
- dd: 일
- HH: 시
- mm: 분
- ss: 초
val localDateTime = LocalDateTime.now()
val formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val localDateTime1 = localDateTime.format(formatter1)
// Result: 2023-04-24 21:46:45
val formatter2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
val localDateTime2 = localDateTime.format(formatter2)
// Result: 2023/04/24 21:46:45
val formatter3 = DateTimeFormatter.ofPattern("yyyy MM dd HH:mm")
val localDateTime3 = localDateTime.format(formatter3)
// Result: 2023 04 24 21:46
참고로, 이렇게 포매터로 인해 변환된 날짜 및 시간들은 “문자열” 타입으로 취급되기 때문에, 이후 처리는 문자열 처리로 작업해야 합니다.\
4. LocalDateTime의 각각의 값 조회
val localDateTime = LocalDateTime.now()
println(localDateTime)
// Result: 2023-04-24T21:53:00.444246
println(localDateTime.year)
// Result: 2023
println(localDateTime.month)
// Result: APRIL
println(localDateTime.monthValue)
// Result: 4
println(localDateTime.dayOfMonth)
// Result: 24
println(localDateTime.hour)
// Result: 21
println(localDateTime.minute)
// Result: 53
println(localDateTime.second)
// Result: 0
println(localDateTime.nano)
// Result: 444246
5. LocalDateTime 연산
LocalDateTime 타입은 Plus / Minus 연산을 할 수 있다.
// Plus
println(localDateTime.plusDays(2))
// Result: 2023-04-26T22:00:08.241569
println(localDateTime.plusMonths(10))
// Result: 2024-02-24T22:00:08.241569
// Minus
println(localDateTime.minusHours(6))
// Result: 2023-04-24T16:00:08.241569
println(localDateTime.minusWeeks(2))
// Result: 2023-04-10T22:00:08.241569
6. LocalDateTime 비교
LocalDateTime은 일반 연산 말고도 비교 연산도 가능하다.
- CompareTo
- isAfter
- isBefore
- isEqual
val localDateTime1 = LocalDateTime.of(2023, 3, 24, 0, 0, 0)
val localDateTime2 = LocalDateTime.of(2023, 4, 24, 0, 0, 0)
println(localDateTime2.isAfter(localDateTime1)) // true
println(localDateTime2.isBefore(localDateTime1)) // false
println(localDateTime2.isEqual(localDateTime2)) // true
println(localDateTime1.compareTo(localDateTime2)) // -1
println(localDateTime2.compareTo(localDateTime1)) // 1
println(localDateTime1.compareTo(localDateTime1)) // 0
7. LocalDateTime 변환
LocalDateTime을 LocalDate 혹은 LocalTime으로 변환할 수 있다.
val localDateTime = LocalDateTime.now()
println(localDateTime)
// Result: 2023-04-24T22:12:06.614821
println(localDateTime.toLocalDate())
// Result: 2023-04-24
println(localDateTime.toLocalTime())
// Result: 22:12:06.614821
이렇게 보면, LocalDateTime으로 생성해서 다른 시간타입으로 변환해 사용하는 것이 좋을 듯 합니다.