일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 공개키 암호
- HTML
- OOP
- jvm
- 암호론
- 2884
- lang package
- 프로그래밍
- 현대암호
- class
- try&catch
- 알고리즘
- 예외처리
- 디렉티브
- 클래스 패스
- 백준 알고리즘
- 재귀호출기본
- JSP
- 자료구조
- 객체지향
- LANG
- 형변환 연산자
- 객체
- 소수판정
- 연결된 예외
- bubble-sort
- 백준
- BufferedWrite
- java
- 자동 형변환
- Today
- Total
코드일기장
[Java] Calendar 클래스 본문
날짜와 시간을 다루는 클래스는 JDK 1.0에 제공된 Date라는 클래스가 있었다. Date 클래스는 옛날 클래스인지라 기능이 매우 적었다. 그래서 JDK 1.1에 새로 생긴 게 Calendar클래스이다. Calendar 클래스는 Date클래스에 없는 기능들을 새로 추가하였다. 하지만 Calendar클래스는 단점들이 발견되어, JDK 1.8부터 'java.time' 패키지를 새로 만들어 기존에 있던 Calendar클래스를 보안하였다.
time패키지를 배우기 전 Calendar클래스는 기존부터 많이 사용하던 클래스라 배워두면 좋다.
Date클래스와 Calendar클래스의 대표적인 단점은 날짜와 시간을 같이 다룬다는 단점이 있었다.
이 단점도 time패키지의 등장으로 어느 정도 수월하게 날짜와 시간을 따로 다룰 수 있게 되었다.
Calendar 클래스는 추상 클래스이다. 추상 클래스이므로 인스턴스를 생성할 수가 없다.
그래서 getInstance() 메서드를 통해 구현된 객체를 얻어야 한다.
인스턴스를 직접 생성하지 못하고 메서드를 통해 인스턴스 객체를 얻어야 하는 이유는 최소한의 변경으로 프로그램이 동작할 수 있도록 하기 위한 것이다.
import java.util.Calendar;
public class TimeSet {
public static void main(String[] args) {
Calendar cal = new Calendar(); // 에러! 추상클래스라 인스턴스 생성 불가.
Calendar cal2 = Calendar.getInstance();
}
}
Calendar.getInstance() 객체를 반환할 때 반환되는 객체는 크게 3가지의 종류로 나뉜다.
1. 서양력-GregorianCalendar
2. 불교력-BuddhistCalendar
3. 일본력
우리나라는 서양력을 사용하여 new GregorianCalendar()를 반환한다.
get()으로 날짜와 시간 필드 가져오기 - int get(int field)
import java.util.Calendar;
public class TimeSet {
public static void main(String[] args) {
Calendar cal2 = Calendar.getInstance();
int Year = cal2.get(Calendar.YEAR); // 년도 가져옴
int month = cal2.get(Calendar.MONTH);//몇월인지 가지고 옴
int day = cal2.get(Calendar.DATE); // 날짜 가지고 옴
int lastDay = cal2.getActualMaximum(Calendar.DATE);//이 달의 마지막 날
System.out.println(Year);
System.out.println(month);
System.out.println(day);
System.out.println(lastDay);
}
}
2022
1
25
31
Calendar에 정의된 필드는 다양하지만 지금은 적게 작성해보겠다.
필드명 | 설명 |
YEAR | 년 |
MONTH | 월 (0부터 시작0 |
WEEK_OF_YEAR | 1월1일 부터 지금까지 몇 번째 주인지. |
WEEK_OF_MONTH | 그 달의 몇 번째 주 |
DATE | 일 |
DAY_OF_MONTH | 그 달의 몇 번째 일 |
DAY_OF_YEAR | 그 해의 몇 번째 일 |
DAY_OF_WEEK | 요일 |
DAY_OF_WEEK_IN_MONTH | 그 달의 몇 번째 요일 |
날짜 관련 필드
위 표를 보면 MONTH필드는 0부터 시작한다. 즉, 배열의 index와 같은 개념이다.
1월은 =0이고
2월은 =1이다.
필드들은
기본적인 패턴이 있다.
필드명 | 설명 |
HOUR | 시간 (0~11) |
HOUR_OF_DAY | 시간 (0~23) |
MINUTE | 분 |
SECOND | 초 |
MILLISECOND | 천분의 일초 |
ZONE_OFFSET | GMT기준 시차(천분의 일초 단위) |
AM_PM | 오전/오후 |
시간 관련 필드
🎈 지금까지 공부한 내용으로 코드 작성
package weon;
import java.util.Calendar;
public class TimeSet {
public static void main(String[] args) {
// 현재 2022-02-25
Calendar cal = Calendar.getInstance(); // Calendar 객체 생성
System.out.println("올해의 년도: " + cal.get(Calendar.YEAR));
System.out.println("현재 몇월인가(0~11): " + (cal.get(Calendar.MONTH) + 1));
System.out.println("올해의 몇 번째 주인가: " + cal.get(Calendar.WEEK_OF_YEAR));
System.out.println("이 달의 몇 번째 주인가: " + cal.get(Calendar.WEEK_OF_MONTH));
System.out.println("이번주의 몇 일인가: " + cal.get(Calendar.DAY_OF_WEEK));
System.out.println("이 달의 몇 일인가: " + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("올해의 몇 일인가: " + cal.get(Calendar.DAY_OF_YEAR));
System.out.println("요일(1~7 1:일요일): " + cal.get(Calendar.DAY_OF_WEEK));
System.out.println("이 달의 몇번 째 주인가: " + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
System.out.println("오전/오후(오전=0,오후=1): " + cal.get(Calendar.AM_PM));
System.out.println("시간(0~11): " + cal.get(Calendar.HOUR));
System.out.println("시간(0~23): " + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("분(0~59): " + cal.get(Calendar.MINUTE));
System.out.println("초(0~59): " + cal.get(Calendar.SECOND));
System.out.println("1000분의 1초(ms): " + cal.get(Calendar.MILLISECOND));
System.out.println("TimeZone(-12~+12): " + cal.get(Calendar.ZONE_OFFSET) / (60 * 60 * 10000));
System.out.println("이 달의 마지막 일:" + cal.getActualMaximum(Calendar.DAY_OF_MONTH));
}
}
올해의 년도: 2022
현재 몇월인가(0~11): 2
올해의 몇 번째 주인가: 9
이 달의 몇 번째 주인가: 4
이번주의 몇 일인가: 6
이 달의 몇 일인가: 25
올해의 몇 일인가: 56
요일(1~7 1:일요일): 6
이 달의 몇번 째 주인가: 4
오전/오후(오전=0,오후=1): 1
시간(0~11): 8
시간(0~23): 20
분(0~59): 17
초(0~59): 34
1000분의 1초(ms): 7
TimeZone(-12~+12): 0
이 달의 마지막 일:28
커버사진
https://www.flaticon.com/kr/free-icon/java_226777
<a href="https://www.flaticon.com/kr/free-icons/" title="자바 아이콘">자바 아이콘 제작자: Freepik - Flaticon</a>
'Java' 카테고리의 다른 글
[Java] 형식화 클래스, DecimalFormat (0) | 2022.03.06 |
---|---|
[Java] Calendar 예제 (0) | 2022.03.03 |
[Java] StringBuffer의 생성자와 메서드 (0) | 2022.02.18 |
[Java] join(), StringJoiner, StringBuffer (0) | 2022.02.17 |
[Java] String 클래스의 생성자와 메서드 (0) | 2022.02.11 |