관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch10 - 9 ~ 16[형식화클래스 , DecimalFormat, SimpleDateFormat] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch10 - 9 ~ 16[형식화클래스 , DecimalFormat, SimpleDateFormat]

소소한나구리 2023. 12. 8. 10:28

1) 형식화클래스

  • java.text패키지 - DecimalFormat(10진수 숫자), SimpleDateFormat(날짜)
  • 숫자와 날짜를 원하는 형식으로 쉽게 변경하여 출력하는 기능 -> 숫자와 날짜를 형식화
    • 참조변수.format("문자열");
  • 형식 문자열에서 숫자와 날짜를 뽑아내는 기능 -> 형식화된 물자열에서 숫자와 날짜를 뽑아냄
    • 참조변수.parse(변경할 변수);

2) DecimalFormat 예제들

  • 숫자 -> 형식 문자열로 변환
  • 형식 문자열 -> 숫자로 변환
// 숫자를 형식 문자열로
double number = 1234567.87; // 10진수
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"); // Number = 모든 숫자 타입의 최고조상
double d = num.doubleValue(); // d = 1234567.89

 

(1) 예제1

  • 여러가지 포맷으로 숫자를 표현
import java.text.*;

class Ex10_6 {
	public static void main(String[] args) throws Exception {
		double number  = 1234567.89;
		String[] pattern = {
			"0",
			"#",
			"0.0",
			"#.#",
			"0000000000.0000",
			"##########.####",
			"#.#-",
			"-#.#",
			"#,###.##",
			"#,####.##",
			"#E0",
			"0E0",
			"##E0",
			"00E0",
			"####E0",
			"0000E0",
			"#.#E0",
			"0.0E0",
			"0.000000000E0",
			"00.00000000E0",
			"000.0000000E0",
			"#.#########E0",
			"##.########E0",
			"###.#######E0",
			"#,###.##+;#,###.##-",
			"#.#%",
			"#.#\u2030",
			"\u00A4 #,###",
			"'#'#,###",
			"''#,###",
		};
		
		for(int i=0; i < pattern.length; i++) {
		    DecimalFormat df = new DecimalFormat(pattern[i]);
		    System.out.printf("%19s : %s\n",pattern[i], df.format(number));
		}
	} // main
}

/*
출력값
                  0 : 1234568
                  # : 1234568
                0.0 : 1234567.9
                #.# : 1234567.9
    0000000000.0000 : 0001234567.8900
    ##########.#### : 1234567.89
               #.#- : 1234567.9-
               -#.# : -1234567.9
           #,###.## : 1,234,567.89
          #,####.## : 123,4567.89
                #E0 : .1E7
                0E0 : 1E6
               ##E0 : 1.2E6
               00E0 : 12E5
             ####E0 : 123.5E4
             0000E0 : 1235E3
              #.#E0 : 1.2E6
              0.0E0 : 1.2E6
      0.000000000E0 : 1.234567890E6
      00.00000000E0 : 12.34567890E5
      000.0000000E0 : 123.4567890E4
      #.#########E0 : 1.23456789E6
      ##.########E0 : 1.23456789E6
      ###.#######E0 : 1.23456789E6
#,###.##+;#,###.##- : 1,234,567.89+
               #.#% : 123456789%
               #.#‰ : 1234567890‰
            ¤ #,### : ₩ 1,234,568
           '#'#,### : #1,234,568
            ''#,### : '1,234,568
*/

 

(2) 예제2

  • 형식화된 문자열을 Number타입으로 변환 후 참조변수에 저장
  • 변환한 참조변수의 값을 변환된 값들을 더블타입과 지수형식으로 변환하여 참조변수에 저장
import java.text.*;

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");	// 형식화된 문자열을 Number타입으로 변환
			System.out.print("1,234,567.89" + " -> ");

			double d = num.doubleValue();           // 더블타입으로 변환
			System.out.print(d + " -> ");

			System.out.println(df2.format(num));	// 지수형식의 문자열
		} catch(Exception e) {}
	} // main
}

// 출력값
// 1,234,567.89 -> 1234567.89 -> 1.235E6

 

** 참고

  • Integer.parseInt() 메서드는 콤마가 포함된 문자열을 숫자로 변환 못함(다른 래퍼클래스의 parse타입() 메서드도 동일함)

(3) DecimalFormat패턴표 일부


3) SimpleDateFormat 예제들

  • Date -> 형식 문자열로 변환
  • 형식 문자열 -> Date로 변환
// 날짜를 형식화 문자열로
Date today = new Date();
SimpleDateFormat = df = new SimpleDateFormat("yyyy-MM-dd");; // 년-월-일 형식으로 출력
// 대문자 M -> 월 , 소문자m -> 분 주의
String result = df.format(today);	// 오늘 날짜를 위의 형태로 변환

// 형식화된 문자열을 다른 형식으로 변경
// 문자열 -> Date변환 (parse()사용) -> 다른 형식의 문자열 변환(format()사용)
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일")
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd")

Date d = df.parse("2015년 11월 23일");	// 문자열을 Date로 변환
String result = df2.format(d);	// Date를 df2의 문자열로 변환 result = "2015/11/23"

 

(1) 예제

import java.util.*;
import java.text.*;

class ex10_8 {
	public static void main(String[] args) {
		Date today = new Date();

		SimpleDateFormat sdf1, sdf2, sdf3, sdf4;
		SimpleDateFormat sdf5, sdf6, sdf7, sdf8, sdf9;

		sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		sdf2 = new SimpleDateFormat("''yy년 MMM dd일 E요일");
		sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		sdf4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");

		sdf5 = new SimpleDateFormat("오늘은 올 해의 D번째 날입니다.");
		sdf6 = new SimpleDateFormat("오늘은 이 달의 d번째 날입니다.");
		sdf7 = new SimpleDateFormat("오늘은 올 해의 w번째 주입니다.");
		sdf8 = new SimpleDateFormat("오늘은 이 달의 W번째 주입니다.");
		sdf9 = new SimpleDateFormat("오늘은 이 달의 F번째 E요일입니다.");

		System.out.println(sdf1.format(today));	// format(Date d)
		System.out.println(sdf2.format(today));
		System.out.println(sdf3.format(today));
		System.out.println(sdf4.format(today));
		System.out.println();
		System.out.println(sdf5.format(today));
		System.out.println(sdf6.format(today));
		System.out.println(sdf7.format(today));
		System.out.println(sdf8.format(today));
		System.out.println(sdf9.format(today));
	}
}

/*
출력값
2023-12-08
'23년 12월 08일 금요일
2023-12-08 10:24:33.568
2023-12-08 10:24:33 오전

오늘은 올 해의 342번째 날입니다.
오늘은 이 달의 8번째 날입니다.
오늘은 올 해의 49번째 주입니다.
오늘은 이 달의 2번째 주입니다.
오늘은 이 달의 2번째 금요일입니다.
/*

 

(2) SimpleDateFormat 패턴표

  • 형식 표형 시 기호를 활용하여 패턴을 입력
  • 월: M
  • 분: m
  • 시간은 보통 H와 h를 사용함
  • 연도형식 표기시 대문자 Y도 있지만 일반적으로 y를 사용하고, Y는 ISO8601 주차 시스템을 따르는 특별한 경우에만 사용

 

 

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의