2주차 프로젝트 호텔 예약 시스템은 키오스크보다 생각할 부분이 더 많았다.
내가 생각한것보다 훨씬 많았다.
호텔 예약 시스템을 만들기 위해 Date
타입을 이용하기로 했다.
우선 Date
타입은
Tue Dec 25 00:00:00 KST 2012
의 순서로 출력된다.
년, 월, 일, 시, 분, 초 여섯개의 인자를 포함하여 입력해야 하는데,
유저가 날짜 조회를 하는데 굳이 시, 분, 초 를 입력할 필요는 없다고 판단하여
년, 월, 일 만 받기로 했다.
또한 우리가 실제 프로그램을 만드는것은 아니나 편의성을 위해 날짜 조회에서String
타입으로 6개의 숫자를 입력받기로 했다 (ex. 231225)
import java.text.SimpleDateFormat;
SimpleDateFormat format = new SimpleDateFormat("yyMMdd");
format.setLenient(false);
while (true) {
System.out.println('\n' + "날짜를 입력해주세요:");
date = scanner.nextLine();
try {
returnDate = format.parse(date);
return returnDate;
} catch (ParseException e) {
System.out.println("날짜를 다시 입력해주세요.");
}
}
SimpleDateFormat
를 import 하니 "yyMMdd"
형태를 쉽게 년, 월, 일로 바꿔주더라.
헌데 yyyy
가 아닌 yy
로 주게 되어 input 값에 121225를 넣게 되면
121225
Sat Dec 15 00:00:00 KST 2012
형태로 21세기로 취급하지만
991225
Sat Dec 25 00:00:00 KST 1999
99년을 삽입하게 되면 20세기로 회귀해버리는걸 확인할 수 있었다.
이 기준은 42와 43을 기준으로 나뉘게 되는걸 확인했다.
421225
Thu Dec 25 00:00:00 KST 2042
431225
Sat Dec 25 00:00:00 KST 1943
괜히 또 쓸데 없는데 관심이 쏠려 찾아보게 되었다.
Oracle : https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
오라클 docs에서 SimpleDateFormat
설명을 보면 yy가 두자리로 입력받을 때에는 현재 년도(즉, 23년)를 기준으로 +20, -80의 범위를 둔다는듯 하다.
이유로는 Y2K
를 예시로 들더라.
'일반적으로 입력받는 두자리수의 년도는 향후 20년 범위가 아니라면 과거를 나타내는 경우가 대부분이다.'
무슨 근거를 들어 저런 기준을 둔건지는 모르겠다.
어쨌든 String
과 Date
사이에서 변환시키는 메서드를 만들어 내외부에서 Date
를 쉽게 활용할 수 있도록 해주었다.
그 외에 이상한 값이 들어올 때 (ex.129925)를 대비한 엄격한 처리를 위한 조건을 주어
format.setLenient(false);
사용자의 장난질을 미리 방지해두었다.
'TIL' 카테고리의 다른 글
2023년 10월 28일 (0) | 2023.10.30 |
---|---|
2023년 10월 27일 (0) | 2023.10.28 |
2023년 10월 25일 (0) | 2023.10.25 |
2023년 10월 24일 (1) | 2023.10.25 |
2023년 10월 23일 (0) | 2023.10.23 |