LocalDate : 특정 지역의 연, 월, 일을 저장하기 위한 클래스. 계산도 가능하다. 일 단위 이하 연산이 불가능하다.
LocalDateTime : 특정 지역의 연, 월, 일, 시, 분, 초, 밀리초를 저장하기 위한 클래스. LocalDate로 전환할 수 있다.
문자열을 바꿀때는 DateTimeFormatter를 사용할 수 있다.
private val DATE_FORMATTER =
DateTimeFormatter.ofPattern("yyyy:MM:dd:HH:mm:ss")
val text = "2022:11:27:13:50:00"
LocalDateTime.parse(text, DATE_FORMATTER)
만약 text가 ISO 공식 포맷을 따르는 경우 DateTimeFormatter의 프로퍼티를 그대로 사용한다.
DateTimeFormatter.ISO_DATE // '2011-12-03T10:15:30'
DateTimeFormatter.ISO_LOCAL_DATE // '2011-12-03'
DateTimeFormatter.ISO_DATE_TIME // '2011-12-03T10:15:30+01:00[Europe/Paris]'
DateTimeFormatter.ISO_LOCAL_DATE_TIME // '2011-12-03T10:15:30'
Duration : 그냥 Long이랑 뭔차인지 모르겠음. Number에서 바로 받을 수 있다.
// Duration 생성자는 private이어서 이렇게 구한다.
val secondsInLong = 30L
secondsInLong.seconds
딱히 Duration을 더해주는 메서드는 없어서 기본적인 plus 메서드들을 사용했다.
fun addDuration(date: LocalDateTime, duration: Duration): LocalDateTime{
return date.plusSeconds(
duration.toLong(DurationUnit.SECONDS)
)
}
Second 외의 단위도 더할 수 있다.
// public LocalDateTime plus(long amountToAdd, TemporalUnit unit)
// Unit에 ChronoUnit.NANOS 부터 ChronoUnit.ERAS, ChronoUnit.FOREVER 까지 넣을 수 있다.
/* 사용예시 */
val nextYear = LocalDateTime.now().plus(1L, ChronoUnit.YEARS)
val tenYearsLater = LocalDateTime.now().plus(1L, ChronoUnit.DECADES)
이때 LocalDate 객체에는 일 단위 이상부터 더할 수 있음에 주의하자.
val impossible = LocalDate.now().plus(30L, ChronoUnit.HOURS) // Unsupported unit Exception 발생
또 LocalDate, LocalDateTime 모두 immutable 객체여서, plus 등의 연산 결과로 새로운 객체가 반환된다.
val old = LocalDate.now() // hashCode : 4141787
val n = old.plusDays(1) // hashCode : 4348635
'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
속성값으로 enum 객체 얻기 (value to enum) (0) | 2023.01.06 |
---|---|
Kotlin의 ArrayDequeue : Stack & Queue를 손쉽게 사용하기 (1) | 2023.01.06 |
List를 Map으로 만들기: associate (0) | 2022.11.26 |
java.io.File 사용법 (0) | 2022.11.06 |
Kotlin Collection 변환 함수 모음 (0) | 2022.10.29 |