반응형
2020년의 매월 두번째 일요일의 날짜를 출력하시오.
▶ 해법
- Calendar를 2020년 1월 1일로 설정한다.
- 반복문으로 1월~12월 두번째 일요일의 출력한다.
- 1일이 일요일이 아닌경우 16에서 1일의 날짜를 빼면 두번째 일요일의 날짜를 구할 수 있다.
- SimpleDateFormat으로 출력한다.
public static void main(String[] args) {
Calendar time = Calendar.getInstance();
time.set(2020, 0, 01);
for(int i = 0; i < 12; i++) {
// 1일의 요일을 구한다.
// EX) 7 = 토요일, 1 = 일요일
int weekDay = time.get(Calendar.DAY_OF_WEEK);
// 둘째주 일요을 찾는다.
if(weekDay == 1){
time.set(Calendar.DAY_OF_MONTH, 8);
}
else{
time.set(Calendar.DAY_OF_MONTH, 16 - weekDay);
}
// Data로 형식을 바꿔준다.
Date date = time.getTime();
// 출력
System.out.println(new SimpleDateFormat("yyyy-MM-dd는 F번째 E요일 입니다.").format(date));
// 월을 더해주고, 일을 1일로 초기화 한다.
time.add(Calendar.MONTH, 1);
time.set(Calendar.DAY_OF_MONTH, 1);
}
}
화면으로부터 날짜를 "yyyy/MM/dd" 형태로 출력받아서 무슨 요일인지 출력하는 프로그렘을 작성하시오. 단 입력된 날짜의 형식이 잘못된 경우 메세지를 보여주고 다시 입력받아야 한다.
▶ 해법
- 입력받을 pattern과 출력할 pattern을 설정한다.
- SimpleDateFormat에 각각의 pattern을 설정한다.
- Scanner를 설정한다.
- 출력할 Date를 설정한다.
- do while문으로 정상적인 입력을 받을 때 까지 입력을 받는다.
- 출력한다.
package hello0719;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Exercise10_2 {
public static void main(String[] args) {
// pattern set
String pattern1 = "yyyy/MM/dd";
String pattern2 = "입력하신 날짜는 E요일 입니다.";
// SDF set
DateFormat sdf = new SimpleDateFormat(pattern1);
DateFormat sdf2 = new SimpleDateFormat(pattern2);
// Scanner set
Scanner s = new Scanner(System.in);
// Date 설정
Date inDate = null;
// 화면으로 부터 날짜를 입력 받는다.
do{
System.out.println("날짜를" + pattern1 + "의 형태로 입력해주세요. (입력예 : 2017/05/11)");
try {
System.out.print(">>>");
inDate = sdf.parse(s.nextLine());
break;
}
catch(Exception e){
System.out.println("다시 입력하세요.");
}
}
while(true);
// 출력
System.out.println(sdf2.format(inDate));
}
}
어떤 회사의 월급날이 매월 21일이다. 두 날짜 사이에 월급날이 몇번있는지 계산해서 반환하는 메서드를 작성하시오.
▷ 존재하는 Code
static void printResult(Calendar from, Calendar to) {
Date fromDate = from.getTime();
Date toDate = to.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.print(sdf.format(fromDate) + " ~ " + sdf.format(toDate) + " : ");
System.out.println(paycheckCount(from, to));
}
public static void main(String[] args) {
Calendar fromCal = Calendar.getInstance();
Calendar toCal = Calendar.getInstance();
fromCal.set(2020,0,1);
toCal.set(2020,0,1);
printResult(fromCal, toCal);
fromCal.set(2020,0,21);
toCal.set(2020,0,21);
printResult(fromCal, toCal);
fromCal.set(2020,0,1);
toCal.set(2020,2,1);
printResult(fromCal, toCal);
fromCal.set(2020,0,1);
toCal.set(2020,2,23);
printResult(fromCal, toCal);
fromCal.set(2020,0,23);
toCal.set(2020,2,21);
printResult(fromCal, toCal);
fromCal.set(2021,0,22);
toCal.set(2020,2,21);
printResult(fromCal, toCal);
}
▷ 추가 해야하는 method
static int paycheckCount(Calendar from, Calendar to) {
int monDiff;
// 0. from의 년도가 to보다 많을 경우 0을 반환한다.
if(from.get(Calendar.YEAR) > to.get(Calendar.YEAR)){
return 0;
}
// 1. from 또는 to가 null이면 0을 반환한다.
if(from == null || to == null){
return 0;
}
// 2. from과 to가 같고 날짜가 21일이면 1을 반환한다.
if(from.equals(to) && from.get(Calendar.DAY_OF_MONTH) == 21){
return 1;
}
// 3. to와 from이 몇개월 차이인지 계산해서 변수 monDiff에 담는다.
monDiff = to.get(Calendar.MONTH) - from.get(Calendar.MONTH);
// 4. monDiff가 음수라면 0을 반환한다.
if(monDiff < 0){
return 0;
}
// 5. 만일 from의 일(DAY_OF_MONTH)가 21일이거나 이전이고
// to의 일(DAY_OF_MONTH)이 21일 이거나 이후이면 monDiff의 값을 1 증가시킨다.
if(from.get(Calendar.DAY_OF_MONTH) <= 21 && to.get(Calendar.DAY_OF_MONTH) >= 21){
monDiff++;
}
// 6. 만일 from의 일(DAY_OF_MONTH)dl 21일 이후고
// to의일(DAY_OF_MONTH)이 21일 이전이면 monDiff의 값을 1감소 시킨다.
if(from.get(Calendar.DAY_OF_MONTH) > 21 && to.get(Calendar.DAY_OF_MONTH) < 21){
monDiff--;
}
return monDiff;
}
자신이 태어난 날 부터 지금 까지 며칠이 지났는지 계산해서 출력하시오.
public static void main(String[] args) {
//자신이 태어난 날터 현재까지 몇일이 지났는지 계산하여 출력하시오.
// 태어난날, 현재 Calender 생성
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
// 태어난날, 현재 Calender 시간 설정
date1.set(2000, 0, 1); // 2000년 1월 1일로 날짜를 설정한다.
date2.set(2016, 0, 29); // 2016년 1월 29일로 날짜를 설정한다.
// SDF의 pattern 설정
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// 태어난날, 현재 시간 출력
System.out.println("birth day=" + df.format(new Date(date1.getTimeInMillis())));
System.out.println("today =" + df.format(new Date(date2.getTimeInMillis())));
// 몇일이 지났는지 계산
long difference = (date2.getTimeInMillis() - date1.getTimeInMillis())/1000;
System.out.println("difference = " + difference);
System.out.println(difference/(24*60*60) +"days"); //1일 =24*60*60
}
반응형
'JAVA' 카테고리의 다른 글
[Java] Collections Framework - List Interface (0) | 2022.07.21 |
---|---|
[Java] Collections Framework (0) | 2022.07.21 |
[Java] Format Class(형식화 클래스) (0) | 2022.07.15 |
[Java] Calendar Class (0) | 2022.07.14 |
[Java] Collections Framework (총정리) (0) | 2022.07.05 |