📝 Calendar 클래스
- Date 클래스처럼 날짜와 시간을 다루는 클래스이다.
- java.util 패키지에 포함되어 있다.
Calendar 클래스는 추상클래스이기 때문에 직접 객체를 생성할 수 없고,
메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 한다.
// 캘린더 객체의 생성 -> 싱글톤 객체
Calendar cal = Calendar.getInstance();
Calendar 객체를 얻었다면 get() 메서드를 이용해서 날짜와 시간에 대한 정보를 읽을 수 있다.
상수 | 설명 |
---|---|
YEAR | 년도 |
MONTH | 월 값의 범위는 0 ~ 11이기 때문에 0이면 1월을 의미한다. |
DAY_OF_MONTH | 일 |
DAY_OF_WEEK | 요일 일 = 1 ~ 토 = 7 |
AM_PM | 오전_오후 0 : 오전, 1: 오후 |
HOUR | 시간 (0~11) |
HOUR_OF_DAY | 시간 (0~23) |
MINUTE | 분 |
SECOND | 초 |
DATE | 이 달의 마지막 일 |
import java.util.Calendar;
public class Main01 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// 년, 월, 일, 시, 분, 초 >> 24시간제
int yy = cal.get(Calendar.YEAR);
int mm = cal.get(Calendar.MONTH) + 1;
int dd = cal.get(Calendar.DAY_OF_MONTH);
int hh = cal.get(Calendar.HOUR_OF_DAY);
int mi = cal.get(Calendar.MINUTE);
int ss = cal.get(Calendar.SECOND);
System.out.printf("%04d년 %02d월 %02d일 %02d시 %02d분 %02d초\n"
,yy, mm, dd, hh, mi, ss);
// 년, 월, 일, 시, 분, 초 >> 12시간제
yy = cal.get(Calendar.YEAR);
mm = cal.get(Calendar.MONTH) + 1;
dd= cal.get(Calendar.DAY_OF_MONTH);
hh = cal.get(Calendar.HOUR);
mi = cal.get(Calendar.MINUTE);
ss = cal.get(Calendar.SECOND);
// 오전(=0), 오후(=1)
int ampm = cal.get(Calendar.AM_PM);
String[] apName = {"오전", "오후"};
System.out.printf("%04d년 %02d월 %02d일 %s %02d시 %02d분 %02d초\n"
,yy, mm, dd, apName[ampm], hh, mi, ss);
}
}
👉 실행결과
2022년 05월 05일 17시 19분 12초
2022년 05월 05일 오후 05시 19분 12초
import java.util.Calendar;
// 캘린더 클래스를 파라미터로 전달받아, 그 객체가 포함하고 있는
// 시간을 출력하는 메서드
public class DatePrinter {
public static void printDateTime(Calendar cal) {
int yy = cal.get(Calendar.YEAR);
int mm = cal.get(Calendar.MONTH) + 1;
int dd = cal.get(Calendar.DAY_OF_MONTH);
int hh = cal.get(Calendar.HOUR_OF_DAY);
int mi = cal.get(Calendar.MINUTE);
int ss = cal.get(Calendar.SECOND);
System.out.printf("%04d년 %02d월 %02d일 %02d시 %02d분 %02d초\n"
,yy, mm, dd, hh, mi, ss);
}
}
import java.util.Calendar;
public class Main0 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
DatePrinter.printDateTime(cal);
System.out.println("-----------------------------");
// 지금으로 부터 100일 후
cal.add(Calendar.DAY_OF_MONTH, 100);
DatePrinter.printDateTime(cal);
System.out.println("-----------------------------");
// 75년 전
cal.add(Calendar.YEAR, -75);
DatePrinter.printDateTime(cal);
System.out.println("-----------------------------");
// 9시간 후
cal.add(Calendar.HOUR, 9);
DatePrinter.printDateTime(cal);
System.out.println("-----------------------------");
// 8달 후
cal.add(Calendar.MONTH, 8);
DatePrinter.printDateTime(cal);
System.out.println("-----------------------------");
}
}
👉 실행결과
2022년 05월 05일 21시 36분 44초
-----------------------------
2022년 08월 13일 21시 36분 44초
-----------------------------
1947년 08월 13일 21시 36분 44초
-----------------------------
1947년 08월 14일 06시 36분 44초
-----------------------------
1948년 04월 14일 06시 36분 44초
-----------------------------
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
DatePrinter.printDateTime(cal);
// 특정 날짜로 지정
cal.set(Calendar.YEAR, 2020);
cal.set(Calendar.MONTH, 4); // month는 0부터 시작해서 4로 했으면 5월이다.
cal.set(Calendar.DAY_OF_MONTH, 5);
cal.set(Calendar.HOUR_OF_DAY, 15);
cal.set(Calendar.MINUTE, 30);
cal.set(Calendar.SECOND, 33);
DatePrinter.printDateTime(cal);
// 특정 날짜로 지정(또 다른 방법)
cal.set(1982, 5, 17);
DatePrinter.printDateTime(cal);
// 특정 날짜로 지정(또 다른 방법> 시, 분, 초 포함 / 24시간제만 가능)
cal.set(1982, 5, 17, 1, 2, 3);
DatePrinter.printDateTime(cal);
// 년, 월, 시, 분, 초는 가만히 두고, 날짜만 1일로 변경하는 경우
cal.set(Calendar.DAY_OF_MONTH, 1);
DatePrinter.printDateTime(cal);
}
}
👉 실행결과
2022년 05월 05일 21시 11분 00초
2020년 05월 05일 15시 30분 33초
1982년 06월 17일 15시 30분 33초
1982년 06월 17일 01시 02분 03초
1982년 06월 01일 01시 02분 03초
import java.util.Calendar;
public class Main04 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// 요일에 해당하는 인덱스 (일 = 1 ~ 토 = 7)
int day = cal.get(Calendar.DAY_OF_WEEK);
System.out.println("요일 인덱스 = " + day);
// 요일을 출력하기
String[] day_name = {"일", "월", "화", "수", "목", "금", "토"};
System.out.println("요일 = " + day_name[day - 1]);
// 이번 달은 몇 주로 되어 있는가?
int week_count = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);
System.out.println("이번 달은 " + week_count + "주로 되어 있다.");
// 이번 달은 몇 일까지 있는가?
int day_count = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("이번 달은 " + day_count + "일 까지 있다.");
// 이번 달은 무슨 요일부터 시작하는가?
cal.set(Calendar.DAY_OF_MONTH, 1);
int first_day = cal.get(Calendar.DAY_OF_WEEK);
System.out.println("이번 달의 시작 요일 인덱스 = " + first_day);
System.out.println("이번 달의 시작 요일 = " + day_name[first_day - 1]);
}
}
👉 실행결과
요일 인덱스 = 5
요일 = 목
이번 달은 5주로 되어 있다.
이번 달은 31일 까지 있다.
이번 달의 시작 요일 인덱스 = 1
이번 달의 시작 요일 = 일
📝 형식화 클래스
- 숫자, 날짜, 텍스트 데이터를 일정한 형식에 맞게 문자열로 표현할 수 있는 클래스이다.
- java.text패키지에 포함되어 있다.
형식화 클래스는 데이터를 정의된 패턴에 맞춰 형식화 할 수 있을 뿐만 아니라
역으로 형식화된 데이터에서 원래의 데이터를 얻어낼 수도 있다.
숫자 형식 클래스
DecimalFormat은 숫자 데이터를 원하는 형식으로 표현하기 위해서 패턴을 사용한다.
기호 | 의미 |
---|---|
0 | 10진수 (값이 없을 때는 0) |
# | 10진수 |
. | 소수점 |
- | 음수부호 |
, | 단위 구분자 |
E | 지수 기호 |
; | 패턴구분자 |
% | 퍼센트 |
\ u2030 | 퍼밀 (퍼센트 * 10) |
\ u00A4 | 통화기호 |
' | escape문자 |
DecimalFormat 사용 방법
✍ 코드 예시)
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
double num = 1234567.89;
DecimalFormat df = new DecimalFormat("#,###.0");
String result = df.format(num);
System.out.println(result);
}
}
👉 실행결과
1,234,567.9
날짜 형식 클래스
날짜를 원하는 형식으로 표현하기 위해서 패턴을 사용한다.
기호 | 의미 |
---|---|
G | 연대 (BC, AD) |
y | 년도 |
M | 월 (1~12 또는 1월~12월) |
w | 년의 몇 번째 주 (1~53) |
W | 월의 몇 번째 주 (1~5) |
D | 년의 몇 번째 일 (1~366) |
d | 월의 몇 번째 일( 1~31) |
F | 월의 몇 번째 요일 (1~5) |
E | 요일 |
a | 오전/오후 (AM,PM) |
H | 시간 (0~23) |
k | 시간 (1~24) |
K | 시간 (0~11) |
h | 시간 (1~12) |
m | 분 (0~59) |
s | 초 (0~59) |
S | 천분의 일초 (0~999) |
z | Time zone (General time zone) ex) GMT+9:00 |
Z | Time zone (RFC 822 time zone) ex) +0900 |
' | escape문자 (특수문자를 표현하는데 사용) |
SimpleDateFormat 사용 방법
✍ 코드 예시)
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
Date today = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd \n오늘은 올 해의 w번째 주입니다.");
String result = sdf.format(today);
System.out.println(result);
}
}
👉 실행 결과
2022-05-06
오늘은 올 해의 19번째 주입니다.
문자열 형식 클래스
MessageFormat 클래스를 사용하면 문자열에 데이터가 들어갈 자리를
표시해 두고, 프로그램이 실행하면서 동적으로 데이터를 삽입해
문자열을 완성시킬 수 있다.
MessageFormat은 정적 format() 메서드를 호출해서 완성된 문자열을 리턴시킨다.
✍ 코드 예시)
public class Main {
public static void main(String[] args) {
String id = "java";
String name = "자바";
String tel = "010-1234-1234";
String text = "id : {0}, 이름 : {1}, 전화번호 : {2}";
String result = MessageFormat.format(text, id, name, tel);
System.out.println(result);
}
}
👉 실행 결과
id : java, 이름 : 자바, 전화번호 : 010-1234-1234
참고자료 : <Java의 정석>, <이것이 자바다>