Notice
Recent Posts
Recent Comments
Link
MSM8994의 화룡점정 블로그
[JAVA] Calendar 객체와 SimpleDateFormat으로 얻은 날짜 문자열을 비교하기 본문
오늘은 Calendar 객체를 통해 오늘 날짜를 구한 뒤 clone() 으로 객체를 복제합니다. 그 복제한 Calendar 객체를 하루 앞당긴 다음 각 날짜 요소를 추출하여 문자열로 바꿔보고, SimpleDateFormat 을 통해서도 바꿔봅니다. 그리고 compareTo를 이용해 어느쪽이 앞인지를 비교하는 소스입니다. 두 날짜는 같은 형식으로 짜여져있어야 합니다. 월일년이나 일월년 처럼 큰게 뒤로 가버리는 경우 비교가 되지 않습니다.
parseInt로 수로 변환해 사용하는 경우 자료형 범위 한계로 Long을 사용해야 합니다.
// 오늘 날짜와 어제 날짜를 구해서 비교하기. // 오늘 날짜 Calendar today = Calendar.getInstance(); // 어제 날짜는 오늘의 -1일 Calendar yesterday = (Calendar) today.clone(); // 참조 복사가 아닌 객체 복제 yesterday.add(Calendar.DAY_OF_MONTH, -1); // 음수를 넣으면 전으로 간다 후가 아니라 // 어제 날짜 수로 // 각 날짜 구성요소를 추출하여 문자열로 바꾼다 int yYear = yesterday.get(Calendar.YEAR); // 년 int yMonth = yesterday.get(Calendar.MONTH) + 1; // 월: Java Calendar 객체에서 월은 0월부터 시작 int yDay = yesterday.get(Calendar.DAY_OF_MONTH);// 일 int yHour = yesterday.get(Calendar.HOUR_OF_DAY); // 24시제 시간 int yMinute = yesterday.get(Calendar.MINUTE); // 분 int ySecond = yesterday.get(Calendar.SECOND); StringBuffer sbYesterday = new StringBuffer(); sbYesterday.append(yYear); // 년은 그대로 출력 sbYesterday.append(yMonth < 10 ? ("0" + yMonth) : yMonth); // 월: 10 미만(한자리 뿐)이면 앞에 0 추가 sbYesterday.append(yDay < 10 ? ("0" + yDay) : yDay); // 일: 10 미만(한자리 뿐)이면 앞에 0 추가 sbYesterday.append(yHour < 10 ? ("0" + yHour) : yHour); // 시: 10 미만(한자리 뿐)이면 앞에 0 추가 sbYesterday.append(yMinute < 10 ? ("0" + yMinute) : yMinute); // 분: 10 미만(한자리 뿐)이면 앞에 0 추가 sbYesterday.append(ySecond < 10 ? ("0" + ySecond) : ySecond); // 초: 10 미만(한자리 뿐)이면 앞에 0 추가 String strYesterday = sbYesterday.toString(); // 오늘 날짜 수로 // 날짜를 수로 바꾸는 가장 간단한 방법 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.KOREA); String strToday = sdf.format(today.getTime()); strToday = strToday.replace("-", "").replace(" ", "").replace(":", "");// 위 날짜 문자열에서 군더더기 제거해 수만 남김 System.out.println(strYesterday + " vs " + strToday); // 비교 int compareTo = strYesterday.compareTo(strToday); if (compareTo < 0) { // 사전상 strYesterday가 strToday보다 앞인 경우 System.out.println(strYesterday + "가 " + strToday + "보다 작다"); } else if (compareTo == 0) { // 사전상 strYesterday와 strToday가 같은 경우 System.out.println("둘 다 " + strYesterday + "네?"); } else { // 사전상 strYesterday가 strToday보다 뒤인 경우 System.out.println(strYesterday + "가 " + strToday + "보다 크다"); } // 수로 만들어 비교 이 경우 int형의 범위 한계로 long을 사용해야 함 long intYesterday = Long.parseLong(strYesterday); long intToday = Long.parseLong(strToday); if (intYesterday < intToday) { // 사전상 strYesterday가 strToday보다 앞인 경우 System.out.println(intYesterday + "가 " + intToday + "보다 작다"); } else if (intYesterday == intToday) { // 사전상 strYesterday와 strToday가 같은 경우 System.out.println("둘 다 " + intYesterday + "네?"); } else { // 사전상 strYesterday가 strToday보다 뒤인 경우 System.out.println(intYesterday + "가 " + intToday + "보다 크다"); }
번외
특정 기간 내인지 알려면 아래처럼 써보세요
// y 범위기간 최소, n 현재, t 범위기간 최대. // 조건은 최소 초과, 최대 미만 if (y.compareTo(n) < 0 && n.compareTo(t) < 0) { System.out.println("범위 기간 안 입니다"); } else { System.out.println("범위 기간 밖 입니다."); }
'코딩' 카테고리의 다른 글
[JS] 사칙연산 계산 (Form, 함수 사용) (0) | 2018.07.25 |
---|---|
[JAVA] Math.random()을 활용한 중복이 없는 임의의 수 6개짜리 배열에 담기 (0) | 2018.07.24 |
[C#] Getter와 Setter를 손쉽게! 속성을 써보자 (0) | 2018.07.20 |
[JAVA] 멤버 변수를 보호해주는 Getter와 Setter (0) | 2018.07.20 |
[JAVA] 배열을 배열에 담은 것이 2중 배열 (0) | 2018.07.18 |
Comments