문제
다음 내 생일까지 몇 일이 남았는지를 구하기
오늘: 2022-11-20
생일: 2023-09-10
D-294
풀이순서
1. Calendar 클래스의 인스턴스 2개 생성
2. 한 개는 생일날짜로 설정
3. 올 해 생일이 지났는지 확인
4. 생일이 지났으면 내년 생일로 변경
5. 디데이 출력
전체코드
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DDay {
public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.MONTH, Calendar.SEPTEMBER);
cal2.set(Calendar.DATE, 10);
int today = cal1.get(Calendar.DAY_OF_YEAR);
int birthday = cal2.get(Calendar.DAY_OF_YEAR);
int dDay;
if (today > birthday) {
cal2.add(Calendar.YEAR, 1);
dDay = cal1.getActualMaximum(Calendar.DAY_OF_YEAR) + birthday - today;
} else if (today < birthday) {
dDay = birthday - today;
} else {
dDay = 0;
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("오늘: " + df.format(cal1.getTime()));
System.out.println("생일: " + df.format(cal2.getTime()));
System.out.println("D-" + dDay);
}
}
풀이과정
1. Calendar 클래스의 인스턴스 2개 생성
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
2. 한 개는 생일날짜로 설정
cal2.set(Calendar.MONTH, Calendar.SEPTEMBER);
cal2.set(Calendar.DATE, 10);
+) 현재 날짜로 생성된 Calendar 인스턴스를 다른 날짜를 설정하고 싶을 경우
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2023); // 년도 바꾸기
cal.set(Calendar.MONTH, Calendar.JANUARY); // 월 바꾸기
cal.set(Calendar.DATE, 1); // 일 바꾸기
cal.set(2022, 11, 25); // 년, 월(0~11, 1월:0), 일 바꾸기
3. 올 해 생일이 지났는지 확인
int today = cal1.get(Calendar.DAY_OF_YEAR);
int birthday = cal2.get(Calendar.DAY_OF_YEAR);
오늘 날짜와 생일 날짜를 이 해의 몇 일인지 int 값으로 구하여 값 비교하기
get(int field)
현재 객체의 주어진 값의 필드에 해당하는 상수 값을 반환한다.
Calendar.DAY_OF_YEAR
이 해의 몇 일
4. 생일이 지났으면 내년 생일로 변경
int dDay;
if (today > birthday) {
cal2.add(Calendar.YEAR, 1);
dDay = cal1.getActualMaximum(Calendar.DAY_OF_YEAR) + birthday - today;
} else if (today < birthday) {
dDay = birthday - today;
} else {
dDay = 0;
}
오늘 날짜와 생일 날짜를 비교하여 오늘 날짜가 생일 날짜보다 더 큰 경우, 생일이 지났으므로 년도 값을 1 더해준다.
add(Calendar.YEAR, 1)
add는 지정한 필드의 값을 원하는 만큼 증가 또는 감소시킨다.
년도 값을 1 만큼 증가 시켜준다.
getActualMaximum(int field)
현재 객체의 특정 필드의 최대 값을 반환한다.
cal1.getActualMaximum(Calendar.DAY_OF_YEAR)
cal1(오늘 날짜)이 포함된 년도(올해)의 일수를 구한다.
dDay = cal1.getActualMaximum(Calendar.DAY_OF_YEAR) + birthday - today
생일이 지난 경우, 내년 생일 날짜 - 현재 날짜를 구해야 한다.
디데이(남은 날짜) = 올해 일수 + 생일까지 일수 - 현재까지 일수
5. 디데이 출력
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("오늘: " + df.format(cal1.getTime()));
System.out.println("생일: " + df.format(cal2.getTime()));
System.out.println("D-" + dDay);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd E");
SimpleDateFormat는 날짜 데이터를 원하는 형식으로 출력하기 위해서 사용한다.
출력하고자 하는 Date인스턴스를 가지고 format(Date d)를 호출하면 지정한 출력형식에 맞게 변환된 문자열을 얻게 된다.
'DEVELOPMENT > JAVA' 카테고리의 다른 글
[JAVA] 연습문제 - 히스토그램(분포도) 만들기 (0) | 2022.11.21 |
---|---|
[JAVA] 연습문제 - 이번 달 달력(calendar) 만들기 (0) | 2022.11.19 |
[JAVA] 날짜와 시간 & 형식 (0) | 2022.11.19 |
[JAVA] 예외처리 (0) | 2022.11.19 |
[JAVA] 객체지향 프로그래밍 (0) | 2022.11.13 |