개발

코틀린: readLine/readln 으로 날짜만 입력받기

kks950115 2023. 12. 11. 21:41
728x90
fun isDate() : Int { //입력 ex) 2024년01월01일, 2023-12-31, 2024/03/03 . 출력: 20240101, 20230213402
    while(true){
        try {
            var date = readln()
            date = date.replace("\\D".toRegex(),"")
            var day = date.takeLast(2).toInt()
            date = date.dropLast(2)
            var month = date.takeLast(2).toInt()
            date = date.dropLast(2)
            var year = date.toInt()
            var localDate = LocalDate.of(year,month,day)
            val formatter = DateTimeFormatter.ofPattern("yyyyMMdd")
            var result = localDate.format(formatter).toInt()
            return result
        } catch (e: DateTimeException) {
            println("잘못된 입력값입니다.")

        }
    }
}


fun main(){
	var date = isDate()    요렇게 써주면 된다.
}

 

readln으로 날짜를 입력받는 코드다. 범용성이 좋다곤 말못하겠지만 필요한 사람이 있을 거 같아서 공유한다.

흐름은....

readline 뒤에 2개는 일자 -> readline  뒤에 2개 버리고 -> readline  뒤에 2개 월 ->  readline 뒤에 2개 버리고  -> readline 나머지는 년도. 

이러면 23456년 그 이상 도 가능하겠지.

 

중간에 정규표현식으로 숫자를 제외한 쓸모없는 값을 제거해주지만 입력값을 yyyyMMdd 로 입력해야하는 제약이 있다.

앞에 0을 빼지 못한 이유는 2014111 <- 이 경우 때문이다. 이게 11월 1일인지 , 1월 11인지 어찌 안단 말인가?

그래서 안전하게 MMdd로 받았다.

 

출력은 yyyyMMdd를 Int로 하는데 이게 마음에 안드는 사람들은 fomatter를 바꾸거나 localdate를 활용할 방법을 구글링 ㄱㄱ

 

개선사항 있으면 덧글로 알려주길 바랍니다.

 

728x90
반응형