[Kotlin] LocalDateTime Format하기
시작하며
LocalDateTime은 날짜(연월일), 시간(시분초)을 포함하는 자바의 클래스다. 이를 Kotlin에서도 사용할 수 있는데 오늘은 LocalDateTime을 문자열로 포맷하는 방법에 대해서 알아본다.
LocalDateTime
LocalDateTime에서 간단히 현재 시간을 표현하는 방법은 다음과 같다.
val currentDateTime = LocalDateTime.now()
이를 Text나 printIn, 로그 등 어떤 방식으로든 확인해 보면 '2024-07-26T13:45:30' 같은 년-월-일-시간-분-초 형식으로 표현된다(T는 ISO 8601 형식에서 날짜와 시간을 구분하는 문자이다). 이를 원하는 문자형식으로 바꾸기 위해서는 패턴을 지정해 포맷팅을 해주어야 한다.
Formatter
fun LocalDateTime.simpleFormatter(): String {
return this.format(DateTimeFormatter.ofPattern("yyyy. M. d. (E)"))
}
먼저 간단한 포맷터를 생성해보자.
LocalDateTime은 DateTimeFormatter를 사용해 포맷할 수 있으며 Kotlin의 확장 함수 기능을 사용해 LocalDateTime에 대한 simpleFormatter 함수를 만들어준다(이름은 임의로 정하면 된다). 이 함수는 String형식을 반환하게 되며 패턴으로 지정한 "yyyy. M. d. (E)"으로 포맷팅 한다.
아래는 몇 가지 추가 예시이다.
fun LocalDateTime.detailFormatter(): String {
return this.format(DateTimeFormatter.ofPattern("yyyy. M. d. (E) a h:mm"))
}
fun LocalDateTime.standardFormatter(): String {
return this.format(DateTimeFormatter.ofPattern("yyyy년 M월 d일 E요일"))
}
fun LocalDateTime.timeFormatter(): String {
return this.format(DateTimeFormatter.ofPattern("a h:mm"))
}
DateTimeFormatter Pattern
DateTimeFormatter는 기본적으로 여러 가지의 패턴을 사용할 수 있는데 만약 원하는 패턴이 이미 존재한다면 그 패턴을 사용하면 되고 직접 패턴을 설정해줄 때는 ofPattern()를 사용하면 된다.
이때 사용하는 알파벳은 y(year), M(Month), d(day), E(day of week), a(AM/PM), H(Hour/24), h(hour/12), m(minute), s(second) 등이 있으며 이외의 알파벳은 하단의 링크를 참고하면 된다.
연도는 y를 사용하며 yyyy면 2024년으로 나온다. 만약 앞 두자리를 제외한 나머지 두 자리만 사용하고 싶다면 yy만 사용하면 24만 나오게 된다.
월은 M을 사용하며 MM이면 01~12처럼 두 자릿수로 나오고 M만 사용한다면 한 자리 수일 때 0을 떼고 1, 2, ..., 12로 나오게 된다.
일은 d를 사용하며 월과 마찬가지로 dd면 두 자릿수, d면 한 자릿수로 표현한다.
요일은 E를 사용하며 Locale이 Korea 또는 Korean라면(한글 기준으로) 월, 화, ..., 일로 나오고 EEEE면 요일까지 붙어 월요일, 화요일, ..., 일요일로 나온다.
오전/오후는 a를 사용하며 요일처럼 한글 기준으로 오전/오후로 표현한다.
시간은 H와 h를 모두 사용하는데 대문자를 사용한다면 24시간 기준이고 소문자를 사용한다면 12시간 기준이다. 이 역시 M, d와 마찬가지로 두 자릿수와 한 자릿수 구분이 있다. 예를 들어 오후 1시라면 H는 13, h는 1로 나온다. 따라서 a를 사용해 오전/오후도 함께 출력한다면 h를 사용하면 된다.
분은 m을 사용하며 역시 자릿수 구분(m 또는 mm)이 있다. 주의할 점은 월을 표현할 때 동일한 알파벳의 대문자를 사용하므로 혼동에 유의해야 한다.
초는 s를 사용하며 마찬가지로 s는 한 자릿수, ss는 두 자릿수로 표현한다.
정리하면 "yyyy년 M월 d일 E요일 a h시 m분 s초"처럼 모두 한 자릿수를 사용하게 설정할 수도 있고 "yy. M. d. (E) HH:mm:ss"처럼 두 자릿수를 사용하며 간단하게 표현하는 등 원하는 대로 패턴을 설정해 줄 수 있다.
Reference
DateTimeFormatter (Java SE 22 & JDK 22)
JavaScript is disabled on your browser. Field Summary Fields The ISO date formatter that formats or parses a date without an offset, such as '20111203'. The ISO date formatter that formats or parses a date with the offset if available, such as '2011-12-03'
docs.oracle.com