
Caldendar클래스와 SimpleDateFormat클래스를 이용해서 2020년의 매월 두 번재 일요일의 날짜를 출력하시오.
package ch10;
import java.text.SimpleDateFormat;
import java.util.*;
public class Ex10_11 {
public static void main(String[] args) {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd은 2번째 일요일입니다.");
Calendar cal = Calendar.getInstance();
for (int i = 1; i<=12;i++)
{
cal.set(2020,i,1);
cal.add(Calendar.DATE , -1);
int end_day = cal.get(Calendar.DATE);
int count = 0;
for(int j =1; j< end_day ; j++)
{
cal.set(2020, i-1, j);
if(cal.get(Calendar.DAY_OF_WEEK) == 1 )
{
count++;
if(count == 2) {
Date d = new Date(cal.getTimeInMillis());
System.out.println(sdf1.format(d));
break;
}
}
}
}
}
}
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Ex10_11_2 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(2020,0,1); // 2020/01/01
for(int i = 0; i < 12; i++)
{
// 복잡도 생각해서 for문 한개 더 안쓰고 싶다면 이렇게 규칙을 찾자!
int weekday = cal.get(Calendar.DAY_OF_WEEK);
int second_sun = (weekday == 1)? 8:16 - weekday;
cal.set(2020, i, second_sun);
Date d = cal.getTime();
System.out.println(new SimpleDateFormat("yyyy-MM-dd은 F번째 E요일입니 다.").format(d));
// 날짜를 다음달 1일로 변경
cal.add(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH,1);
}
}
}
화면으로 부터 날짜를 "201705/11"의 형태로 입력받아서 무슨 요일인지 출력하는 프로그램 작성(단. 입력된 날짜의 형식이 잘못된 경우 메세지를 보여주고 다시 입력)
import java.util.*;
import java.text.*;
class Exercise10_2 {
public static void main(String[] args) {
String pattern = "yyyy/MM/dd";
String pattern2 = "입력하신 날짜는 E요일입니다."; // 'E'는 일~토 중의 하나가 된다.
DateFormat df = new SimpleDateFormat(pattern); DateFormat df2 = new SimpleDateFormat(pattern2);
Scanner s = new Scanner(System.in);
Date inDate = null;
do {
System.out.println("날짜를 " + pattern
+ "의 형태로 입력해주세요.(입력예:2017/05/11)");
try {
System.out.print(">>");
inDate = df.parse(s.nextLine()); // 입력받은 날짜를 Date로 변환한다. break; // parse()에서 예외가 발생하면 이 문장은 수행되지 않는다.
} catch(Exception e) {} } while(true);
System.out.println(df2.format(inDate)); } // main
}
어떤 회사의 월급날이 매월 21일이다.
두 날짜 사이에 월급 날이 몇번 있는지 계산해서 반환하는 메서드 작성
package ch10;
import java.util.*;
import java.text.*;
public class Ex10_13 {
static int paycheckCount(Calendar from, Calendar to)
{
if(from == null || to == null) {
return 0;
}
if(from.equals(to) && from.get(Calendar.DAY_OF_MONTH) == 21 ) {
return 1;
}
int fromYear = from.get(Calendar.YEAR);
int fromMon = from.get(Calendar.MONTH);
int fromDay = from.get(Calendar.DAY_OF_MONTH);
int toYear = to.get(Calendar.YEAR);
int toMon = to.get(Calendar.MONTH);
int toDay = to.get(Calendar.DAY_OF_MONTH);
int monDiff = (toYear * 12 + toMon) - (fromYear * 12 - fromMon);
if(monDiff < 0) { return 0;}
if(from.get(Calendar.DAY_OF_MONTH) <= 21 && to.get(Calendar.DAY_OF_MONTH) >= 21) {
monDiff += 1;
}
if(from.get(Calendar.DAY_OF_MONTH) > 21 && to.get(Calendar.DAY_OF_MONTH) < 21) {
monDiff -= 1;
}
return monDiff;
}
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);
}
}
자신이 태어난 날부터 지금까지 며칠이 지났는지 계산해서 출력하시오
package ch10;
import java.text.*;
import java.util.*;
public class Ex_10_14 {
public static void main(String[] args) {
String pattern = "yyyy-MM-dd";
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
date1.set(1998,7, 29);
date2.set(2022,8, 26);
DateFormat df = new SimpleDateFormat(pattern);
System.out.println("birth day="
+ df.format(date1.getTimeInMillis()));
System.out.println("today ="
+ df.format(new Date(date2.getTimeInMillis())));
long difference =
(date2.getTimeInMillis() - date1.getTimeInMillis())/1000;
System.out.println(difference/(24*60*60) +"days");//1일 =24*60*60
}
}