형식화 클래스
- java.text패키지의 DecimalFormat(10진수 숫자), SimpleDateFormat(날짜 형식화)
- 형식화: 숫자와 날짜를 원하는 형식으로 출력 (숫자, 날짜 -> 형식 문자열)
- 반대로 형식 문자열에서 숫자와 날짜를 뽑아내는 기능도 가능 (형식 문자열 -> 숫자, 날짜)
1) DecimalFormat
- 숫자를 형식화하는 데 사용함
- 숫자 데이터를 정수, 부동소수점, 금액 등의 다양한 형식으로 표현할 수 있음
- 숫자 -> 일정한 형식의 문자열로 변환
- DecimalFormat으로 객체 생성 한 뒤에 format( )을 사용
- 10진수 -> 지수표현으로 E는 10을 나타냄. E6은 10의 6제곱
- 반대로 일정한 형식의 텍스트 데이터(문자열)를 숫자로 쉽게 변환하는 것도 가능
-> parse()를 사용해서 문자열을 숫자타입의 객체로 변환
-> Integer.parseInt( ), Float.parseFloat( ), Double.parseDouble는 콤마(,)가 포함된 문자열을 숫자로 변환 못함
- Number은 모든 숫자 래퍼클래스의 최고조상!(doubleValue 메서드를 사용해서 숫자(기본형)으로 변환!)
-> 패턴을 그대로 갖고 사용 가능!
예제) 포맷을 바꿈(문자열 -> 숫자, 숫자 -> 문자열)
import java.text.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"); // parse가 문자열 -> 숫자(Number)
System.out.print("1,234,567.89 " + "-> " + num); //
// 숫자(Number) -> Double형으로
double d = num.doubleValue(); // doubleValue()는 저장된 값을 double형의 값으로 변환
System.out.print(" -> " + df2.format(d)); // d의 값을 format을 사용해서 형식문자열로(지수)
} catch (Exception e) {}
}
}
<결과값>
1,234,567.89 -> 1234567.89 -> 1.235E6
- Number클래스는 Integer, Double과 같은 숫자를 저장하는 래퍼클래스의 조상이다.(그래서 Double형, Integer형 다 받을 수 있음)
- “1,234,567.89”는 용량이 커서 int형, long형을 형변환해도 출력이 안된다…!
- df2.format(num) == df2.format(d)의 결과값은 같음(형은 다르다! num은 number, d는 double)
try-catch구문을 하는 이유(parse 메서드 때문에)
-> parse는 DecimalFormat의 조상인 NumberFormat에 정의된 메서드이고 메서드의 선언부는
public Number parse(String source) throws ParseException
-> 예외선언 아니면 try-catch구문을 사용해서 예외처리를 해야함 이 예제에서는 try-catch구문을 사용해서 예외처리를 했다.
2) SimpleDateFormat
1) 날짜와 시간을 다양한 형식으로 출력(날짜와 시간 -> 형식화된 문자열)
(1) 원하는 출력형식의 패턴을 작성해 SimpleDateForrmat인스턴스를 생성
(2) 출력하고자 하는 Date 인스턴스를 가지고 format(Date 인스턴스 참조변수)메서드를 호출
Date today = new Date(); // 오늘 날짜로 객체 생성
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); //mm은 분(시간)
// 오늘 날짜를 yyyy-MM-dd형태로 변환해 반환
String result = sf.format(today);
System.out.println(result);
(1) 오늘 날짜 생성
(2) SimpleDateFormat으로 원하는 출력형식의 패턴을 지정
(3) format( )을 사용해서 원하는 형식으로 result 변수에 넣기
(4) result 변수 출력 -> 지정한 출력형식에 맞게 변환된 문자열 출력!(ex 2020-01-07)
패턴에 사용되는 기호
2) 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수도 있다.(형식화된 문자열 -> 날짜와 시간)
- Parse( ) 메서드 사용
- 문자열 -> parse( ) -> date(날짜) -> format( ) -> 문자열
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date date = df.parse("2015년 11월 23일"); // 문자열을 parse를 사용해 date로 변환
String result2 = df2.format(date); // date를 format을 사용해 문자열로
System.out.println(result2);
예제1) 날자와 시간 표현
Date date = new Date(); // 현재의 날짜와 시간
SimpleDateFormat sdf1, sdf2, sdf3, sdf4, sdf5, sdf6, sdf7, sdf8, sdf9;
sdf1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf1.format(date));
sdf2 = new SimpleDateFormat("yy년 MMM dd일 E요일"); // MM월로 써도 가능!
System.out.println(sdf2.format(date));
sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(sdf3.format(date));
sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
System.out.println(sdf4.format(date));
sdf5 = new SimpleDateFormat("오늘은 올 해의 D번째 날입니다.");
System.out.println(sdf5.format(date));
sdf6 = new SimpleDateFormat("오늘은 이 달의 d번째 날입니다.");
System.out.println(sdf6.format(date));
sdf7 = new SimpleDateFormat("오늘은 올 해의 w번째 주입니다.");
System.out.println(sdf7.format(date));
sdf8 = new SimpleDateFormat("오늘은 이 달의 W번째 주입니다.");
System.out.println(sdf8.format(date));
sdf9 = new SimpleDateFormat("오늘은 이 달의 W번째 E요일입니다.");
System.out.println(sdf9.format(date));
예제2) parse( )를 사용해서 날짜 데이터의 출력형식을 변환(문자열 -> 날짜인스턴스)
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
(1)
public class Ex10_9 {
public static void main(String[] args) {
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일"); // 객체생성
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd"); // 객체생성
try {
Date date = df.parse("2022년 01월 07일"); // 문자열 "2019년~" -> 날짜 date로
System.out.println(df2.format(date)); // 날짜를 -> 문자열로 "2022/01/07"
} catch(Exception e) { }
}
}
(2)
//try-catch구문을 사용하지 않는다면 이렇게 예외선언해야함!
public class Ex10_9 {
public static void main(String[] args) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
SimpleDateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date date = df.parse("2022년 01월 07일"); // 문자열 "2019년~" -> 날짜 date로
System.out.println(df2.format(date)); // 날짜를 -> 문자열로 "2022/01/07"
}
}
예제3) Date인스턴스만 format메서드에 사용할 수 있으므로 Calendar인스턴스를 생성한 뒤 Date인스턴스로 변환하고, 날짜 -> 문자열로 출력!
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateFormatEx2 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(2022,10,6); // 2022년 11월 6일 - Month는 0 ~ 11의 범위를 가짐
Date date = cal.getTime(); // Calendar를 Date로 변환
SimpleDateFormat sdf1, sdf2, sdf3, sdf4;
sdf1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf1.format(date));
sdf2 = new SimpleDateFormat("yy-MM-dd E요일");
System.out.println(sdf2.format(date));
sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(sdf3.format(date));
sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
System.out.println(sdf4.format(date));
}
}
'멀티캠퍼스 풀스택 과정 > Java의 정석' 카테고리의 다른 글
자바의 정석8-2 ArrayList, LinkedList (0) | 2022.01.08 |
---|---|
자바의 정석8-1 컬렉션프레임워크(List, Set, Map) (0) | 2022.01.08 |
자바의 정석7-1 날짜와 시간클래스(Calendar, Date) (0) | 2022.01.08 |
자바의 정석6-4 오토박싱 & 언박싱 (0) | 2022.01.07 |
자바의 정석6-3 Math클래스, Rapper클래스, Number클래스 (0) | 2022.01.07 |