티스토리 뷰

헷갈리니까 사용법을 저장해두겠다

 

1. DecimalFormat : 숫자 형식화에 사용 

 

double number = 1234567.89;  
DecimalFormat df = new DecimalFormat("#.#E0");
//출력형식의 패턴 작성, DecimalFormat 인스턴스 df 생성 
String result = df.format(number); //해당 인스턴스로 format 메서드 호출 
System.out.println(result);
// or  System.out.println(df.format(number))

위는 DecimalFormat 인스턴스의 Format 메서드를 사용하였다.

 

DecimalFormat df2 = new DecimalFormat("#,###.##"); //출력형식 패턴 작성하여 
DecimalFormat df3 = new DecimalFormat("#.###E0"); //DecimalForamt의 인스턴스 생성
try {
	Number num = df2.parse("1,234,567.89");  
	// 콤마로 나뉘어져 있는 문자열을 소수형으로 parse 하여 number 클래스 객체에 저장
	double d = num.doubleValue(); //해당 num 객체를 double형으로 변환 
	System.out.println(d);
    //or System.out.println(num); << 같은 결과 
	System.out.println(df3.format(d));
}catch (Exception e) {}

위는 DecialFormat 인스턴스의 parse 메서드를 사용하여 문자열을 Number 클래스에 저장해주었다.

흔히 문자열을 정수로 바꿀 때 사용하는 Integer.parseInt 메서드는 콤마가 포함된 문자열을 숫자로 변환하지 못하기 때문에, 콤마가 포함된 문자열을 숫자로 변환할 때에는 꼭 DecimalFormat 인스턴스의 parse 메서드를 사용하자.

그리고 이를 완벽하게 숫자로 바꾸어 주기 위해서 Number 클래스에 있는 메서드를 이용해 double 형으로 변환하자.

- Number 클래스는 Integer, Double과 같은 숫자를  저장하는 Wrapper 클래스의 조상이며, doubleValue()는 Number에 저장된 값을 double형으로 변환하여 반환해준다. 

 

 

2. SimpleDate format : 날짜데이터 형식화에 사용 

 

date과 calander로 날짜 데이터를 계산했다면, SimpleDate foramt으로 계산한 날짜 데이터를 다양한 형식으로 출력 가능하다.

 

Date today = new Date();
String pattern = "yyyy-MM-dd"; //출력형식 패턴 
SimpleDateFormat df = new SimpleDateFormat(pattern); //인스턴스 생성 
System.out.println(df.format(today)); //format 메서드 호출하여 출력 
String result = df.format(today); //foramt 메서드 호출하여 string에 저장 

Decimal format과 같다. 다만 여기서는 format 메서드에 들어가는 매개변수가 숫자가 아니라 , Date 인스턴스라는 점이다. 

 

Calendar cal = Calendar.getInstance(); //추상클래스이기 때문에 메서드를 통해 인스턴스를 얻는다.
cal.set(2020,3,6);
Date day = cal.getTime(); //cal 데이터를 Date으로 변환 
		
SimpleDateFormat sdf =  new SimpleDateFormat("yyyy-MM-dd E요일");
System.out.println(sdf.format(day));

Date인스턴스만 format 메서드에 사용 될 수 있으므로Calendar 인스턴스를 Date인스턴스로 변환 (cal.getTime())한다.

 

String pattern = "yyy년 MM월 dd일";
DateFormat df = new SimpleDateFormat(pattern);
// DateFormat은 SimpleDateForamte의 조상이다. 
// 따라서 SimpleDateFormat 인스턴스 생성 가능 
		
try {
	Date d = df.parse("2020년 4월 6일"); 
	//parse는 DateFormat에 정의 되어있다. 그래서 DateFormat 형식으로 인스턴스 생성
	//parse는 문자열 source를 날짜 Date 인스턴스로 변환하여 Date 인스턴스 형식으로 반환 
	System.out.println(df.format(d));
	String res = df.format(d);
	System.out.println(res);
	//문자열 -> date 인스터스로 파싱 된 데이터를 , format 메서드를 이용해서 출력형식 패턴으로 변환한다.					
}catch(Exception e) {} //지정된 형식과 입력된 형식이 일치하지 않는 경우를 위해 예외처리 

parse 메서드는SimpleDateFormat의 조상인 DateFormat에 정의 되어있으므로, DateForamt 형식으로 SimpleDateForamt 인스턴스를 생성해준다. 

parse 메서드는 문자열 소스를 Date 인스턴스 형식으로 반환하고, 반환된 Date인스턴스 형식은 다시 format 메서드로 출력형식을 가진 채 출력되거나 String 에 저장될 수 있다.

 

 

예시 

import java.util.*;
import java.text.*;
public class Format_test {
	public static void main(String[] args) {
		String pattern ="yyyy/MM/dd";
		DateFormat df = new SimpleDateFormat(pattern);
		Scanner s = new Scanner(System.in);
		
		Date inDate=null;
		
		System.out.println("날짜를 " + pattern + "의 형태로 입력해주세요. "
				+ "(입력 예 : 2020/04/06) " );
		while(s.hasNextLine()) {
			try {
				inDate=df.parse(s.nextLine());
				
				break;
			}catch(Exception e) {
				System.out.println("날짜를 " + pattern + "의 형태로 다시 입력해주세요. (입력 예: 2020/04/06");
			}
		}
		Calendar cal = Calendar.getInstance(); 
		cal.setTime(inDate); //위에서 문자열 소스로부터 파싱해온 Date 인스턴스를 Calendar 인스턴스로 변환  
		Calendar today = Calendar.getInstance(); 
		long day = (cal.getTimeInMillis()-today.getTimeInMillis())/(60*60*1000);
		//시간 차 계산 
		System.out.println("입력하신 날짜는 현재와" +day + " 시간차이가 있습니다.");
		
	}
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함