객실 예약을 받을 때 체크인/체크아웃을 String으로 입력하지만, 해당 값을 date형으로 바꾸기 위해 date 형식에 대해 알아봤다.
// 1. 현재 시간
Date()
// 2. 현재 시간을 기준으로 n(TimeInterval)초가 지난 시점의 시간
Date(timeIntervalSinceNow: TimeInterval)
// 3. 다른 시간으로부터 n(TimeInterval)초 지난 시점의 시간
Date(timeInterval: TimeInterval, since: Date)
String <-> Date 형 변환을 위해 DateFommatter을 사용한다.
// 1. Date to String
let now() = Date()
let formatter = DateFormatter()
fotmatter.dateFormat = "yyyy-MM-dd"
let result = formatter.srting(from: now)
print(result) // 2023-07-21
// 2. String to Date
let dateString = "2023-07-21"
formatter.dateFormat = "yyyy-MM-dd"
let date = formatter.date(from: dataString)!
print(date) // 2023-07-21
나는 date를 입력받을거라 readLine()을 사용해 날짜를 받아 date형식으로 변환했다.
let dataFormatter = DateFormatter()
dataFormatter.dateFormat = "yyyy-MM-dd"
...
repeat {
...
if input == 3 {
print("---------------------------")
print("<객실 예약 하기>")
print("체크인 날짜를 입력해주세요.(ex. YYYY-MM-DD)")
var inputCheckInDate = readLine()
while inputCheckInDate == nil || (dataFormatter.date(from: inputCheckInDate!) == nil) {
print("잘못 입력하였습니다. 올바른 날짜를 입력해주세요.(ex. YYYY-MM-DD)")
inputCheckInDate = readLine()
}
}
...
} while true
체크아웃 날짜를 입력받을 때 체크인보다 빠르거나 같은 날짜를 입력하지 못하도록 조건문과 반복문을 사용했다.
if let date1: Date = dataFormatter.date(from: inputCheckInDate!),
let date2: Date = dataFormatter.date(from: inputCheckOutDate!) {
var newDate2: Date = date2
while date1 >= newDate2 {
print("체크인 날짜보다 이전 날짜를 선택할 수 없습니다. 날짜를 확인해주세요.")
inputCheckOutDate = readLine()
if let finalCheckOutDate = dataFormatter.date(from: inputCheckOutDate!) {
newDate2 = finalCheckOutDate
}
}
}
처음에는 date를 비교할 수 있는 .compare()을 사용하려고 했는데 switch case 문의 경우 날짜를 다시 입력받을 수 있는 반복문을 구현하기가 어려웠다.
repeat {
switch date1.compare(date2) {
case .orderedSame:
print("체크인 날짜와 같습니다. 날짜를 확인해주세요.")
inputCheckOutDate = readLine()
let newDate2: Date = dataFormatter.date(from: inputCheckOutDate!) {
date2 = newDate2
}
case .orderedDescending:
print("체크인 날짜보다 이전 날짜를 선택할 수 없습니다. 날짜를 확인해주세요.")
inputCheckOutDate = readLine()
case .orderedAscending:
continue
}
break
} while true
코드 짜고 실행할 땐 몰랐는데, 지금보니까 .orderedDescending에서 date2로 할당해줬으면 계산이 됐을 것 같다.
이부분은 내일 다시 수정해보는걸로..