언어/JAVA

[JAVA] Formatter

hvoon 2022. 9. 8. 10:43
public class Formatter01 {
	public static void main(String[] args) {	
		// 날짜 데이터 클래스, Calendar 와는 다름
		Date today = new Date();  //java.util.Date
		System.out.println(today);
		
		// 날짜 서식 클래스
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		// 날짜 데이터를 서식 데이터에 맞춰서 적용후 출력
		System.out.println(    sdf1.format( today )    );

		// 날짜 서식 레퍼런스 변수들
		SimpleDateFormat sdf2, sdf3, sdf4, sdf5, sdf6, sdf7, sdf8, sdf9;
		
		// 서식 인스턴스 생성 및 저장
		sdf2 = new SimpleDateFormat("yy년 MM월 dd일 E요일");
		sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		sdf4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
		
		// today 적용후 출력
		System.out.println(sdf2.format(today));
		System.out.println(sdf3.format(today));
		System.out.println(sdf4.format(today));
		
		// y : 년도를 표시할 자리수 문자(yyyy:2020  yy:20)
		// M : 월을 표시할 자리수 문자 (MM:01~12  M:1~12)
		// d : 일을 표시하는 자리수 문자 (dd: 01~31  d:1~31)
		// H : 시에 해당하는 자리수 문자(HH : 01~23  H:1~23)
		// h : 시에 해당하는 자리수 문자(hh : 01~12  h:1~12)
		// m : 분   
		//s : 초   
		//S : 밀리초   
		// 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(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));
		
		Calendar cal = Calendar.getInstance();
		Date day = cal.getTime();   // Calendar 객체의 현재 날짜값을 Date 값으로 변환
		sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		sdf2 = new SimpleDateFormat("yy-MM-dd E요일");
		sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		sdf4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
		System.out.println(sdf1.format(day)); // format(Date d)
		System.out.println(sdf2.format(day));
		System.out.println(sdf3.format(day));
		System.out.println(sdf4.format(day));
	}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Formatter02 {
	public static void main(String[] args) throws ParseException {
		String s2 = "2020/11/24";
		SimpleDateFormat sdf1= new SimpleDateFormat("yyyy/MM/dd");
		
		// SimpleDateFormat에는 parse메서드를 이용하여 문자열을 날짜로 변환해주는 기능이 있음
		// 다만 변환을 위해서는 설정된 서식을 반드시 지켜야하는 제약이 있음
				
		Date d = sdf1.parse(s2);
		// parse를 이용해서 Date 형식으로 변경이 되어야 아래의 포맷적용이 가능
		SimpleDateFormat sdf2= new SimpleDateFormat("yyyy년 MM월 dd일");
		System.out.println(sdf2.format(d));
	}
}
public class Formatter03 {
	public static void main(String[] args) {
		DecimalFormat df = new DecimalFormat("0000.00");
		double number  = 123.123456;
		System.out.printf("%19s : %f  -->  %s\n", "0000.00", number, df.format(number));

		// 양식문자 0 : 표시할 숫자들의 자리 표현. 0:숫자 한자리  00:숫자두자리  등
		// 정수부분에서 표시할 숫자는 많은데 0의 갯수가 모자르면 필요한 만큼 0의 갯수를 자동 추가 적용
		// 숫자 12345, 양식 "000"  -> 표시 12345
		// 숫자자리수보다 0의 갯수가 많으면 많은 만큼 0으로 채워서 표시 
		// 숫자 123, 양식 "00000" -> 표시 00123
		// 소수점 아래에 대해서는 반대로 0의 갯수만큼만 소수점 아래 자리수를 표시.
		// 0갯수로 인해 표시되지 못하는 소수점 자리 중 가장 윗자리에서 반올림
		// 남는 자리에 강제로0 으로 채우는 방식은 동일  
		// 0.1264(0.00)->0.13   0.1(0.00) -> 0.10
		
		number  = 123456.71289;
		df = new DecimalFormat("0.000");
		System.out.printf("%19s : %f ->  %s\n", "0.000", number, df.format(number));
		
		number  = 123456789.0;
		// 천단위 구분기호 표시 패턴 0,000,000
		df = new DecimalFormat("0,000.00");  
		System.out.printf("%19s : %f ->  %s\n",	"0,000.00", number, df.format(number));
		// 소수점아래로 표시할 내용이 없는데 양식에 소수점 자리 0이 있다면 강제0으로 표시
		
		df = new DecimalFormat("0,000");
		number  = 89.0;
		System.out.printf("%19s : %f ->  %s\n", "0,000",number, df.format(number));
		
		// 무효의 0을 표시하지 않는 #을 0대신 사용
		df = new DecimalFormat("#,###"); 
		System.out.printf("%19s : %f ->  %s\n", "#,###",number, df.format(number));
		// 10의 자리든 100의 자리든 표시할 숫자가 있을때만 표시 - 강제 0표시 안함
		// 표시할 숫자가 1000 을 넘어갈때만 (,)를표시
		number  = 123456.0;
		System.out.printf("%19s : %f ->  %s\n", "#,###",number, df.format(number));
		
		// #을 이용한 소수점 표시  : # 의갯수보다 표시할 숫자가 많으면 # 갯수만큼 표시
		// # 의 갯수보다 표시할 숫자가 적으면 숫자있는 만큼만 표시
		number  = 123456.7128;
		df = new DecimalFormat("#,###.###");
		System.out.printf("%19s : %f ->  %s\n",	"#,###.###",number, df.format(number));
		number  = 123456.7;
		System.out.printf("%19s : %f ->  %s\n",	"#,###.###",number, df.format(number));
		
		number = 1234;
		df = new DecimalFormat("₩ #,### 원"); // 단위 또는 기호 첨가
		System.out.printf("%19s : %f ->  %s\n", "#,### 원",number, df.format(number));	
		
		number = 0.8539;
		df = new DecimalFormat("#.#%"); //100을 곱해서 %로 표시
		System.out.printf("%19s : %f ->  %s\n", "#.#%",number, df.format(number));
		
		number = 123.172839;
		System.out.println("123.172839 ->" + (int)(number*10)/10.0);
		df = new DecimalFormat("0.0");
		System.out.println("123.172839 ->" + df.format(number));
	}
}