20231207 TIL

JaeYeong·2023년 12월 7일

날짜/시간 구현에 관해

문제

금주차 심화 과제를 진행해보려고 했는데, 오늘의 날짜를 받아와야 하는 부분이 있었다. 따로 배운 적은 없어서 그 부분을 잘 몰랐던 것이 문제라면 문제인데

어떻게 해결했는가?

구현해야 했던 기능

체크인 날짜는 지금 날짜와 비교해서 이전날짜는 입력받을 수 없고 체크아웃 날짜는 체크인 날짜보다 이전이거나 같을 수는 없어요

먼저 이 플로우를 정확히 정리해야 했다.

  1. 체크인 날짜를 정수로 입력받고
  2. 정수로 입력받은 날짜를 날짜 형식으로 바꿔준 후
  3. 오늘의 날짜를 받아서 입력받은 날짜에서 오늘의 날짜를 빼준다.
  4. 차가 0보다 크거나 같으면 통과되고
  5. 음수이면 다시 인풋창으로 넘어간다.
  6. 체크아웃 인풋으로 넘어가 체크아웃 날짜를 정수로 입력받는다.
  7. 정수로 입력받은 날짜를 날짜 형식으로 바꿔준 후
  8. 체크아웃 날짜에서 체크인 날짜를 빼준다.
  9. 차가 0보다 크거나 같으면 통과되고
  10. 음수이면 다시 인풋창으로 넘어간다.

날짜를 확인하기 위해서 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("호텔 예약이 완료되었습니다.")

아쉬웠던 부분

1. 차가 음수일 때의 기능

차가 음수일 때는 인풋으로 돌아가 숫자를 다시 입력해달라는 메시지가 떠야 좋은 플로우인데, 지금 코드로는 구현되어 있지 않다. 일단 이부분을 먼저 구현해 보는 것이 지금의 최우선 과제이다.

2. 왜 이런 패키지를 사용하나요?

왜 이 패키지를 사용해야 하는지 아직은 생각해봐도 잘 떠오르지 않았던 것이 아쉬웠다. 당장 어떻게 해야 할지 답이 명확히 드러나는 부분은 아니지만, 이런 부분을 생각하고 기록해두는 것과 그렇지 않는 것은 미래에 큰 차이를 불러올 것 같은 느낌이 들어 기록으로 남긴다.

3. 오늘의 컨디션

왠지 모르게 오늘은 피로가 빨리 찾아오는 느낌이다. 사람이 컨디션이 항상 좋을 수는 없지만, 그래도 관리할 수 있는 부분을 생각해 봐야할 듯 하다.

0개의 댓글