1.1 날짜와 시간
1.2. Calendar클래스
추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다.
- get()으로 날짜와 시간 필드 가져오기 - int get(int field)
Calendar cal = Calendar.getInstance(); // 현재 날짜와 시간으로 셋팅됨
int thisYear = cal.get(Calendar.YEAR); // 올해가 몇년인지 알아낸다.
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); // 이 달의 마지막날
- Calendar에 정의된 필드
...
Calendar today = Calendar.getInstance(); // Calendar객체를 생성
System.out.println("이 해의 년도 : " + today.get(Calendar.YEAR)); // 이 해의 년도 : 2023
System.out.println("월(0~11, 0:1월) " + today.get(Calendar.MONTH)); // 월(0~11, 0:1월): 8
2 형식화 클래스
- 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자, 날짜 -> 형식 문자열)
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number); // result = "1.2E6"
- 형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식 문자열 -> 숫자, 날짜)
DecimalFormat df = new DecimalFormat("#.###.##");
Number num = df.parse("1,234,567,89");
double d = num.doubleValue(); // 1234567.89
parse는 문자열을 Number타입(모든 숫자 래퍼클래스의 최고 조상)의 객체로 바꿈
형식화에 사용될 패턴을 정의하는데, 데이터를 정의된
패턴에 맞춰 형식화할 수 있을 뿐만 아니라 역으로 형식화된 데이터에서 원래의 데이터를 얻어낼 수도 있다.
2.1 DecimalFormat
형식화 클래스 중에서 숫자를 형식화 하는데 사용됨(숫자 -> 형식 문자열)
public class Ex10_7 {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("#,###.##");
DecimalFormat df2 = new DecimalFormat("#.###E0");
try{
Number num = df.parse("1,234,567.89"); // 형식문자열 -> 숫자
System.out.print("1,234,567.89" + " -> ");
double d = num.doubleValue();
System.out.print(d + " -> ");
System.out.println(df2.format(num)); // 숫자 -> 형식문자열
}catch (Exception e){
e.printStackTrace();
}
}
}
2.2 SimpleDateFormat
- 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다.
Date today = new Date(); //Sun Aug 13 12:36:26 KST 2023
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); //2023-08-13
String result = df.format(today);
- 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수도 있다.
public class Ex10_7 {
public static void main(String[] args) {
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
try{
Date d = df.parse("2015년 11월 23일");
String result = df2.format(d);
System.out.println(result); // 2015/11/23
}catch (Exception e){
e.printStackTrace();
}
}
}
외울 필요 없고 필요할 때 찾아서 쓰면 될 것 같다.
2.3 ChoiceFormat
특정 범위에 속하는 값을 문자열로 변환해준다. 연속적 또는 불연속적인 범위의 값들을 처리하는데 있어서 if,switch문은 적절하지 못한 경우가 많다. 이럴 때 ChoiceFormat을 사용하면 코드를 간단하고 직관적으로 만들 수 있다.
public class ChoiceFormatEx1 {
public static void main(String[] args) {
double[] limits = {60, 70, 80, 90}; // 낮은 값부터 큰 값 순으로 적어야 함
// limits, grades간의 순서와 개수를 맞춰야 한다.
String[] grades = {"D", "C", "B", "A"};
int[] scores = {100, 95, 88, 70, 52, 60, 70};
ChoiceFormat form = new ChoiceFormat(limits, grades);
for(int i=0; i < scores.length; i++){
System.out.println(scores[i] + ":" + form.format(scores[i]));
}
}
}
public class ChoiceFormatEx1 {
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++){
System.out.println(scores[i] + ":" + form.format(scores[i]));
}
}
}
# : 경계값을 포함
< : 경계값을 포함하지 않음
2.4 MessageFormat
데이터를 정해진 양식에 맞게 출력할 수 있도록 도와준다. 데이터가 들어갈 자리를 마련해 놓은 양식을 미리 작성하고 프로그램을 이용해서 다수의 데이터를 같은 양식으로 출력할 때 사용하면 좋다.
String text = MessageFormat.format("My name is {0}", "전창하");
System.out.println(text);
//output
//My name is 전창하
public static void main(String[] args) {
String tableName = "CUST_INFO";
String msg = "INSERT INTO " + tableName +
" VALUES (''{0}'',''{1}'',''{2}'',''{3}'');";
Object[][] arguments = {
{"이자바", "02-123-1234", "27", "07-09"},
{"김프로", "02-123-1234", "33", "07-09"}
};
for (int i=0; i < arguments.length; i++){
String result = MessageFormat.format(msg, arguments[i]);
System.out.println(result);
}
}
다수의 데이터를 Database에 저장하기 위한 Insert문으로 변환하는 경우 등에 사용하면 좋을 것이다.
홑따옴표(')는 MessageFormat의 양식에 escape문자로 사용되기 때문에 문자열 msg내에서 홑따옴표를 사용하려면 연속으로 두번 사용해야 한다.
'자바 스터디' 카테고리의 다른 글
자바 스터디 끝 (0) | 2023.08.22 |
---|---|
[자바의 정석] CH 16 (0) | 2023.08.19 |
[자바의정석] CH14 2.6~2.8 (0) | 2023.08.05 |
[자바의 정석] CH13.8 쓰레드의 실행제어 (0) | 2023.07.30 |
[자바의 정석] CH 12 (Generics, Enum, Annotation) (0) | 2023.07.20 |