본문 바로가기
개발

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

by kks950115 2023. 12. 11.
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
반응형

'개발' 카테고리의 다른 글

TIL : 20231213  (0) 2023.12.13
TIL: 20231212  (0) 2023.12.12
프로그래머스 :공원 산책  (1) 2023.12.11
TIL : 코틀린 기초  (1) 2023.12.11
TIL: 프로그래머스 달리기 경주, 시간복잡도(Time Complexity)  (0) 2023.12.08

댓글