금주차 심화 과제를 진행해보려고 했는데, 오늘의 날짜를 받아와야 하는 부분이 있었다. 따로 배운 적은 없어서 그 부분을 잘 몰랐던 것이 문제라면 문제인데
체크인 날짜는 지금 날짜와 비교해서 이전날짜는 입력받을 수 없고 체크아웃 날짜는 체크인 날짜보다 이전이거나 같을 수는 없어요
먼저 이 플로우를 정확히 정리해야 했다.
날짜를 확인하기 위해서 java.time.LocalDate 패키지와 java.time.format.DateTimeFormatter를 이용했다.
그렇게 해서 일단 기능적으로는 구현해두었다.
fun main() {
//체크인 과정
println("체크인하실 날짜를 입력해주세요.")
// 체크인할 날짜는 정수로 받고
var checkinDateInput:Int = readln()!!.toInt()
// 받은 정수를 문자열로 변환
var checkinDateString:String = checkinDateInput.toString()
// 포매터 : 특정 형식을 따르는 문자열을 Date로
val formatter = DateTimeFormatter.ofPattern("yyyyMMdd")
// Date를 연산하기 위해 변환
val checkinDate = LocalDate.parse(checkinDateString,formatter).toEpochDay()
// 오늘 날짜를 연산하기 위해 변환
var today = LocalDate.now().toEpochDay()
// 체크인 유효성 검사
val checkinDateCheck = (checkinDate-today)
if (checkinDateCheck <0) {
println ("체크인은 지난날은 선택할 수 없습니다.")
}
//체크아웃 과정
println("체크아웃하실 날짜를 입력해주세요.")
// 체크아웃할 날짜는 정수로 받고
var checkoutDateInput:Int = readln()!!.toInt()
// 받은 정수를 문자열로 변환
var checkoutDateInputString:String = checkoutDateInput.toString()
// Date를 연산하기 위해 변환
val checkoutDate = LocalDate.parse(checkoutDateInputString,formatter).toEpochDay()
// 체크아웃 유효성 검사
val checkoutDateCheck = (checkoutDate-checkinDate)
if (checkoutDateCheck <0) {
println ("체크인 날짜보다 이전이거나 같을 수는 없습니다.")
}
println("호텔 예약이 완료되었습니다.")
차가 음수일 때는 인풋으로 돌아가 숫자를 다시 입력해달라는 메시지가 떠야 좋은 플로우인데, 지금 코드로는 구현되어 있지 않다. 일단 이부분을 먼저 구현해 보는 것이 지금의 최우선 과제이다.
왜 이 패키지를 사용해야 하는지 아직은 생각해봐도 잘 떠오르지 않았던 것이 아쉬웠다. 당장 어떻게 해야 할지 답이 명확히 드러나는 부분은 아니지만, 이런 부분을 생각하고 기록해두는 것과 그렇지 않는 것은 미래에 큰 차이를 불러올 것 같은 느낌이 들어 기록으로 남긴다.
왠지 모르게 오늘은 피로가 빨리 찾아오는 느낌이다. 사람이 컨디션이 항상 좋을 수는 없지만, 그래도 관리할 수 있는 부분을 생각해 봐야할 듯 하다.