반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 오토레이아웃
- 날짜처리
- 내배캠
- DART
- strikeThrough
- URLSession
- 알고리즘
- 플러터
- 개발자
- attributedText
- 스파르타코딩클럽
- pop up button
- userdefaults
- 커맨드라인툴
- ios
- 앱개발
- 계산기만들기
- 메모장만들기
- Swift
- Xcode
- ListTile
- todolist
- 내일배움캠프
- Wil
- 코드스니펫
- pull down button
- UISlider
- Storyboard Reference
- Storyboard
- Flutter
Archives
- Today
- Total
이리메라 갖다가
[Swift] 호텔 객실 예약 프로그래밍(2) : date, 날짜 다루기 본문
728x90
반응형
1. date 형식
객실 예약을 받을 때 체크인/체크아웃을 String으로 입력하지만, 해당 값을 date형으로 바꾸기 위해 date 형식에 대해 알아봤다.
// 1. 현재 시간
Date()
// 2. 현재 시간을 기준으로 n(TimeInterval)초가 지난 시점의 시간
Date(timeIntervalSinceNow: TimeInterval)
// 3. 다른 시간으로부터 n(TimeInterval)초 지난 시점의 시간
Date(timeInterval: TimeInterval, since: Date)
2. 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
3. date 검증
체크아웃 날짜를 입력받을 때 체크인보다 빠르거나 같은 날짜를 입력하지 못하도록 조건문과 반복문을 사용했다.
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
}
}
}
4. date 비교 compare
처음에는 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
- date1.compare(date2) : date1을 기준으로 date2와 비교
- .orderedSame : date1과 date2가 같을 때
- .orderedDescending : date2가 date1보다 앞선 날짜일 때
- .orderedAscending : date1가 date2보다 앞선 날짜일 때
코드 짜고 실행할 땐 몰랐는데, 지금보니까 .orderedDescending에서 date2로 할당해줬으면 계산이 됐을 것 같다.
이부분은 내일 다시 수정해보는걸로..
728x90
반응형
'TIL' 카테고리의 다른 글
[Swift] 알고리즘 문제 - 몫 구하기, 배열 뒤집기, 문자열 뒤집기 (0) | 2023.07.25 |
---|---|
[Swift] 클로저(Closure), enumerated() (0) | 2023.07.24 |
[Swift] 호텔 객실 예약 프로그래밍(1) : Array, sorted(), 랜덤값 추출 (0) | 2023.07.20 |
[Swift] 나만의 계산기 만들기(2) : 나머지 연산자, 소수점 처리 (0) | 2023.07.19 |
[Swift] 나만의 계산기 만들기(1) : Xcode 다루기, 스토리보드, IBAction (0) | 2023.07.18 |