728x90
1. calendar
- 추상 클래스
- 구현 객체: 서양력, 태국력, 음력
- 구현 순서
- getInstance() -> clear() -> set()
1.1. 주요 method
- getInstance(); 호출
- Calendar가 추상 클래스에서 getInstance를 통해서 구현 객체를 호출해야한다.
- Calendar가 추상 클래스에서 getInstance를 통해서 구현 객체를 호출해야한다.
- clear(); 오차 제거를 위한 시간 초기화
- clear(); 모든 필드 초기화
- clear(Calendar.SECOND); 초 초기화 // 년, 월, 요일, 시간, 분 등 초기화 가능
- set(); 원하는 날짜 시간 지정
- void set(int field, int value); // 시간만 셋팅할 때는 이걸로만 지정해야함
- void set(int year, int month, int date);
- void set(int year, int month, int date, int hourOfDay, int minute);
- void set(int year, int month, int date, int hourOfDay, int minute, int second);
- get(); 필요한 부분 추출
- 미리 지정된 상수 필드 존재
- 날짜
YEAR, MONTH(0월부터 시작), WEEK_OF_YEAR, WEEK_OF_MONTH, DATE, DAY_OF_MONTH, DAY_OF_YEAR, DAY_OF_WEEK(일요일 부터 1~7), DAY_OF_WEEK_IN_MONTH - 시간
HOUR(0~11), HOUR_OF_DAY(0~23), MINUTE, SECOND, MILLISECOND, ZONE_OFFSET(gmt 기준 시차), AM_PM(오전/오후)
- 날짜
- 미리 지정된 상수 필드 존재
- getTimeInMillis(); 밀리세컨드로 변환 - 날짜 차이 구할 때 사용
- 차이값 / 24(시간)*60(분)*60(초)*1000(밀리세컨드)
- 원하는 부분까지 나누면 된다.
1.2. 응용 method
- add();
- 파라미터로 상수필드, 양수 혹은 음수 를 가진다.
- 다른 필드에 영향을 미친다. -> 8월 31일 에서 날짜 +1 -> 9월 1일로 변경
- roll();
- 파라미터로 상수필드, 양수 혹은 음수 를 가진다.
- 다른 필드에 영향을 안미친다. -> 8월 31일 에서 날짜 +1 -> 8월 1일로 변경
- 정리
Calendar calendar = Calendar.getInstance(); // 내부적으로 작동하여 구현 객체를 반환
calendar.clear(); // 전체 초기화 // 부분 초기화도 가능하다.
// calendar.clear(Calendar.SECOND);
calendar.set(1997,5,25);// 6월은 5를 넣어야한다.
calendar.set(Calendar.HOUR_OF_DAY, 20); // 시간,분,초는 이렇게 필드와 셋팅 시간으로 나타낼 수 있다.
calendar.set(Calendar.MINUTE, 20); // 시간,분,초는 이렇게 필드와 셋팅 시간으로 나타낼 수 있다.
calendar.set(Calendar.SECOND, 20); // 시간,분,초는 이렇게 필드와 셋팅 시간으로 나타낼 수 있다.
calendar.get(calendar.FIELD) // 아래 필드 다 사용 가능. 전부 숫자로 나옴
// YEAR, MONTH, WEEK_OF_YEAR, WEEK_OF_MONTH, DATE, DAY_OF_MONTH, DAY_OF_YEAR, DAY_OF_WEEK, DAY_OF_WEEK_IN_MONTH
// HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND, ZONE_OFFSET, AM_PM
Calendar calendar = Calendar.getInstance(); // 내부적으로 작동하여 구현 객체를 반환
calendar.clear();
calendar.set(2020,2,22);
// get
calender.add(Calendar.MONTH, 10);
calender.roll(Calendar.MONTH, -10);
1.3. Calendar와 Date 변환
- 이게 제일 중요
// calendar -> date
Calendar calender = Calendar.getInstance(); // 내부적으로 작동하여 구현 객체를 반환
Date date = new Date(calender.getTimeInMillis());
//date -> calendar
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
2. 형식화 클래스
- 데이터를 정의된 패턴에 맞춰 형식화 할 수 있고 역으로 형식화된 데이터에서 원래의 데이터를 얻을 수 있다.
2.1. DecimalFormat
- 숫자를 형식화 하는 클래스
- 패턴
기호 | 의미 | 패턴 | 결과 format(12345567.89) |
0 | 10진수(값이 없을 때 0 넣음) | 0 0.0 0000000000.0000 |
1234568 1234567.9 0001234567.8900 |
# | 10진수 | # #.# ##########.#### |
1234568 1234567.0 1234567.89 |
. | 소수점 | #.# | 1234567.9 |
- | 음수부호 | #.#- -#.# |
1234567.9- -1234567.9 |
, | 단위 구분자 | #,###.## #,####.## |
1,234,567.89 123,4567.89 |
% | 퍼센트 | #.#% | 123456789% |
- 사용
double nuber = 1234567.89;
DecimalFormat df = new DecimalFormat("#,###.##");
df.formate(number);
- 형식화된 문자열을 숫자로변경
- new DecimalFormat("
패턴을 가진 숫자 string에 맞게 형식 패턴을 작성") 그래야지 동일한 패턴을 가진 String이 들어올때 정수로 올바르게 변환이 가능하다. - DecimalFormat인스턴스.parse("1,234,567,89"); 형식을 가진 string이 Number로 변환
- 변수명.doubleValue(); Number type을 기본형 타입으로 변환
- new DecimalFormat("
// 핵심만 작성함
DecimalFormat decimalFormat = new DecimalFormat("###,###,###.#");
Number parse = decimalFormat.parse("123,123,123");
double d = parse.doubleValue();
2.2. SimpleDateFormat
- 날짜 데이터를 원하는 형태로 출력하는 것
- 패턴
- 날짜
- y :년도
- M: 1~12월
- d: 1~31일
- 시간
- H: 0~23 시간
- h: 1~12 시간
- m: 0~ 59 분
- s: 0~59 초
- 날짜
- Date -> 원하는 형식의 날짜 시간형태로 표현하기
- Calender는 사용 불가
- 작동방식은 위와 동일하다
- SimpleDateFormat 객체 생성 및 내부에 원하는 형식 작성
- .format(new Date()); date를 형식에 맞게 변형하고 string으로 반환
- .parse(); 이용해서 원래 Date 객체 형태로 변형 가능 - SimpleDateFormat 내부 패턴이 parse의 argument에 들어가는 string의 형식과 동일해야함
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String format = simpleDateFormat.format(date);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = simpleDateFormat.parse("2020/06/12");
2.3. ChoiceFormat
- 특정 범위에 속하는 값을 문자열로 변환
- 사용 방법
- 배열
- pattern
- 배열 규칙
- limit: double type, 오름차순 작성
- grades: limit와 개수 동일
class ChoiceFormat {
public static void main(String[] args) {
double[] limits = {60, 70, 80, 90};
String[] grades = {"D", "C", "B", "A"};
int[] scores = {100, 95, 88, 79, 52, 60, 70};
ChoiceFormat form = new ChoiceFormat(limits, grades);
for(int i = 0; i < scores.length; i++) {
form.format(scores[i]);
}
}
}
- pattern 규칙
- 패턴 구분자로 #, < 2가지 제공
- # : 경계값 포함
- < : 경계값 포함 안함
- 패턴 구분자로 #, < 2가지 제공
class ChoiceFormat {
public static void main(String[] args) {
String pattern = "60#D|70#C|80<B|90#A";
int[] scores = {91, 90, 80, 88, 70, 52, 60};
ChoiceFormat form = new ChoiceFormat(pattern);
for(int i = 0; i < scores.length; i++) {
form.format(scores[i]);
}
}
}
2.4. MessageFormat
- 사용할 일이 그렇게 있을지는 모르겠는데 활용법은 또 다양
- 자바의 정석 549p
3. java.time 패키지
- 불변 클래스로 구성
- 패키지 : time, time.chrono, time.format, time.temporal, time.zone