1. Date 클래스
# 날짜를 추상화해서 설계된 클래스
1) JVM이 동작하는 운영 시스템(OS)의 시간을 받아서 밀리 초 단위로 날짜를 처리한다.
2) long형의 시간 데이터를 감싸고 있는 클래스이다.
3) java.util.Date;
3) Date 클래스를 인스턴스하는 과정에서 매개변수가 없는 생성자를 사용하면 인스턴스 시점의 시스템 시간으로 Date 객체의 값이 설정된다.
하지만 매개변수를 long 형태로 받는 Date() 생성자를 사용하면 입력된 매개변수를 바탕으로 시간이 계산되어 Date 객체의 값이 설정된다.
4) Date 클래스에는 생성자나 메소드들 중에 상당히 많은 수가 'Deprecated(퇴화)' 되어 있는데, 이는 다음 버전에서 삭제될 수 있음을 뜻한다.
이런 기능들은 대부분 Calendar 클래스를 이용하도록 제안한다.
# deprecated 된 메소드
1 2 3 4 5 6 7 8 9 10 11 12 | package dateex; import java.util.Date; public class DateTest01 { public static void main(String[] args) { Date d = new Date(); d.getDate(); // deprecated } } | cs |
# 설명
Line 9: getDate() 메소드는 deprecated되어 사용할 수 없다.
5) Date 클래스의 메소드들
6) 1시간을 의미하는 밀리 초: 1시간 * 60분 * 60초 * 1000밀리 초
7) Date 클래스의 getTime()과 setTime()을 이용해서 어느정도는 구하거나 설정이 가능하지만,
long형의 계산된 시간을 개발자가 해석하거나 설정하려면 부가적인 수식 과정이 필요하게 된다.
따라서 이러한 복잡한 수식을 거치지 않기 위해 Calendar 클래스를 이용하는 것이다.
# Date 클래스 연습하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package dateex; import java.util.Date; public class DateEx01 { public static void main(String[] args) { // 현재 시간을 표시하는 Date 객체 Date nowDate = new Date(); // 1시간 전의 시간을 표시하는 Date 객체 Date preDate = new Date(); preDate.setTime(nowDate.getTime() - (60*60*1000)); // 컴퓨터 세계의 최초의 시간 Date zeroDate = new Date(); zeroDate.setTime(0); System.out.println("nowDate object: " + nowDate.toString()); System.out.println("preDate object: " + preDate.toString()); System.out.println("zeroDate object: " + zeroDate.toString()); System.out.println("nowDate is after preDate: " + nowDate.after(preDate)); System.out.println("nowDate is before preDate: " + nowDate.before(preDate)); System.out.println("compareTo result: " + nowDate.compareTo(preDate)); } } # 실행 결과 nowDate object: Tue Jan 23 20:56:29 KST 2018 preDate object: Tue Jan 23 19:56:29 KST 2018 zeroDate object: Thu Jan 01 09:00:00 KST 1970 nowDate is after preDate: true nowDate is before preDate: false compareTo result: 1 | cs |
2. Calendar 클래스
# Date 클래스의 정보를 처리하기 위한 기능을 제공
1) 개발자가 임의의 시간을 설정하여 Date 객체를 만들어내거나 특정한 요일 등의 정보를 알아내는데 사용한다.
2) abstract 키워드로 선언된 추상 클래스이다.
따라서 new 키워드를 사용하여 객체를 인스턴스할 수 없고, getInstance() 메소드를 사용하여 객체를 생성한다.
- 매개변수로 받은 Locale 객체는 위치 정보를 추상화한 클래스
- Timezone 클래스는 표준 시간대를 추상화한 클래스
3) Calendar 클래스의 메소드들
4) Calendar 클래스의 클래스 상수들
(1) 요일을 의미하는 클래스 상수들
- SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
(2) 월을 의미하는 클래스 상수들
- JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
(3) 날짜와 시간의 형식을 의미하는 클래스 상수들
- ERA, YEAR, MONTH, WEEK_OF_YEAR, WEEK_OF_MONTH, DATE, DAY_OF_MONTH, DAY_OF_YEAR, DAY_OF_WEEK,
SECOND, MILLISECOND, DAY_OF_WEEK_IN_MONTH, AM_PM, HOUR, HOUR_OF_DAY, MINUTE
(4) 표기 형식을 의미하는 클래스 상수들
- SHORT(단축형), LONG(정확하게 모든 글자를 다 사용)
# Calendar 클래스 연습하기 (1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package dateex; import java.util.Calendar; public class DateTest01 { static final int YEAR = 1; static String getYoil(int day) { String yoil = ""; switch(day) { case 1: yoil = "일"; break; case 2: yoil = "월"; break; case 3: yoil = "화"; break; case 4: yoil = "수"; break; case 5: yoil = "목"; break; case 6: yoil = "금"; break; case 7: yoil = "토"; break; } return yoil; } public static void main(String[] args) { Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; int date = cal.get(Calendar.DATE); int day = cal.get(Calendar.DAY_OF_WEEK); // 1(일), 2(월), ... ,7(토) System.out.println("year: " + year); System.out.println("month: " + month); System.out.println("date: " + date); System.out.println("day: " + day); String yoil = DateTest01.getYoil(day); System.out.println("yoil: " + yoil); } } # 실행 결과 year: 2018 month: 1 date: 23 day: 3 yoil: 화 | cs |
# 설명
Line 9~23: Line 32에서 받아온 숫자로 표시된 요일을 각 해당하는 한글로 된 요일로 출력해준다.
Line 27: Calendar 클래스는 new를 통해 인스턴스할 수 없고 getInstance() 메소드로 생성해준다.
Line 30: Calendar.MONTH의 범위는 0~11이기 때문에 1씩 증가시켜 출력한다.
Line 39: Line 9~23에서 만든 클래스 메소드를 사용하여 한글로 바뀐 요일을 받아온다.
# Calendar 클래스 연습하기 (2)
# class MyCalendar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | package dateex; import java.util.Calendar; public class MyCalendar { static public String toKoreanDay(int numDay) { String day = ""; switch(numDay) { case 1: day = "일"; break; case 2: day = "월"; break; case 3: day = "화"; break; case 4: day = "수"; break; case 5: day = "목"; break; case 6: day = "금"; break; case 7: day = "토"; break; } return day; } static public String toKoreanAmPm(int numAmPm) { String ampm = ""; switch(numAmPm) { case 0: ampm = "오전"; break; case 1: ampm = "오후"; break; } return ampm; } static public String toKoreanDay(Calendar cal) { String day = ""; switch(cal.get(Calendar.DAY_OF_WEEK)) { case 1: day = "일"; break; case 2: day = "월"; break; case 3: day = "화"; break; case 4: day = "수"; break; case 5: day = "목"; break; case 6: day = "금"; break; case 7: day = "토"; break; } return day; } static public String toKoreanAmPm(Calendar cal) { String ampm = ""; switch(cal.get(Calendar.AM_PM)) { case 0: ampm = "오전"; break; case 1: ampm = "오후"; break; } return ampm; } static public void printCalendar(Calendar cal) { // 출력(2018년 1월 19일 00시 00분 00초) String str = ""; str += cal.get(Calendar.YEAR) + "년 "; str += (cal.get(Calendar.MONTH) + 1) + "월 "; str += cal.get(Calendar.DATE) + "일 "; str += toKoreanDay(cal) + "요일 "; str += toKoreanAmPm(cal) + " "; str += cal.get(Calendar.HOUR) + "시 "; str += cal.get(Calendar.MINUTE) + "분 "; str += cal.get(Calendar.SECOND) + "초"; System.out.println(str); } } | cs |
# 설명
Line 7: 매개변수를 Calendar.DAY_OF_WEEK로 받아온 정수형값들을 각 해당하는 요일로 바꾼다.
Line 22: 매개변수를 Calendar.AM_PM으로 받아온 정수형값들을 각 해당하는 시간대로 바꾼다. (오전0, 오후1)
Line 32: 매개변수를 Calendar 타입으로 받으며 메소드 안에서 Calendar.DAY_OF_WEEK를 가져와 해당하는 요일로 바꾼다.
Line 47: 매개변수를 Calendar 타입으로 받으며 메소드 안에서 Calendar.AM_PM를 가져와 해당하는 시간대로 바꾼다.
Line 57: 매개변수를 Calendar 타입으로 받으며 메소드 안에서 각 클래스 상수들을 가져와 출력한다.
# Main()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package dateex; import java.util.Calendar; public class DateTest01 { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); int day = cal.get(Calendar.DAY_OF_WEEK); // 1(일), 2(월), ... ,7(토) System.out.println("MyCalendar.toKoreanDay: " + MyCalendar.toKoreanDay(day)); int ampm = cal.get(Calendar.AM_PM); // 오전0, 오후1 System.out.println("ampm: " + ampm); System.out.println("MyCalendar.toKoreanAmPm: " + MyCalendar.toKoreanAmPm(ampm)); MyCalendar.printCalendar(cal); } } # 실행 결과 MyCalendar.toKoreanDay: 화 ampm: 1 MyCalendar.toKoreanAmPm: 오후 2018년 1월 23일 화요일 오후 8시 43분 17초 | cs |
# 설명
Line 11: MyCalendar 클래스에서 매개변수를 int형을 받아오는 toKoreanDay(int day) 메소드를 사용하여 요일을 출력한다.
Line 15: MyCalendar 클래스에서 매개변수를 int형을 받아오는 toKoreanAmPm(int numAmPm) 메소드를 사용하여 시간대를 출력한다.
Line 17: 인스턴스한 Calendar 클래스 객체인 cal을 매개변수로 넘겨주어 정보를 출력한다.
'JAVA > JAVA2' 카테고리의 다른 글
JAVA2_day08 | String 메소드 연습문제 (WordChange) (0) | 2018.01.23 |
---|---|
JAVA2_day08 | Final, Wrapper 클래스 (0) | 2018.01.23 |
JAVA2_day07 | 추가공부 (StringBuffer, StringTokenizer) (0) | 2018.01.23 |
JAVA2_day07 | String 메소드 연습문제 (2) (0) | 2018.01.23 |
JAVA2_day07 | String 메소드 연습문제 (1) (0) | 2018.01.19 |