위 에러는 Android API 26(android 8.0 오레오 버전) 미만 에서 java.time 패키지를 사용할 떄 발생하는 오류다.
안드로이드 버전마다 지원 범위가 다를 수 있으므로, 사용하려는 기기의 안드로이드 버전에 따라 지원 여부를 확인하는 것이 중요하다.
https://developer.android.com/reference/java/time/package-summary
java.time | Android Developers
developer.android.com
위 document 를 확인해보면 Added in API level 26 이라고 적혀있다.
즉, API 26 이상부터 java.time 패키지를 이용할 수 있다는 말이다.
그렇다면? 26 이전 버전은 못 사용할까? 아니다.
두 가지 방법으로 해결 할 수 있다.
1. ThreeTen 의존성 추가
Android Studio 에서 java.time 패키지 안 메서드를 사용하려고 import 를 시도하면, org.threeten.bp 패키지가 import 될 것이다.
왜 java.time 이 아닌, threeten 패키지가 백포팅이 될까?
백포팅이 무엇이냐면? 최신버전의 소프트웨어의 일부를 가져와서 동일한 소프트웨어의 이전 버전으로 포팅하는 작업을 일컫는다.
즉, java.time 을 26 이전 버전에서 사용할 수 없지만, 사용할 수 있게끔 만드는게 백포팅이라고 생각하면 될 것이다.
위에서 말한 것처럼 백포팅을 하여 java.time 패키지 내 소스를 이용할 수 있지만, Error 가 발생할 것이다.
왜? threeten 라이브러리를 의존성 추가하지 않았으니까. 당연히 Error 가 날 것이다.
그래서 아래와 같이 의존성 추가를 해주면 정상 동작할 것이다.
dependencies {
implementation 'com.jakewharton.threetenabp:threetenabp:1.3.0'
}
2. java.time 패키지를 이용하는 게 아닌, Calendar 를 이용하기
현재 년월일 시간을 가져오기 위해서 java.time 패키지 속 LocalDate 또는 LocalDateTime 를 사용하기 위해서 위와 같이 의존성 추가 해야하는데 그러길 원치 않는다면, Calendar 를 이용하면 된다.
import java.util.Calendar
fun main() {
// 현재 년도에 앞자리 두 개 뽑기
val currentYear: StringCalendar = Calendar.getInstance().get(Calendar.YEAR).toString().substring(0, 2)
println("현재 년도: ${currentYear}23")
}