DEV/JAVA

[JAVA] Date Format 유효성, 형식 검사

베이비코더 2021. 2. 18. 22:29
반응형

DB에서 날짜 형식의 데이터를 불러왔을 때 그 데이터가 유효한 형식인지 검사하는 코드입니다.

 

예를 들어, '2021-02-18'의 경우 맞는 날짜이지만 '2021-02-30'은 없는 날짜이기 때문에 잘못된 데이터라 할 수 있습니다.

 

또한 형식을 yyyy-MM-dd로 맞추어 놓았는데 yyyyMMdd인 경우에도 만찬 가지로 잘못된 데이터가 될 수 있습니다.

package date;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatCheck {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date d = new Date();
		String today = sdf.format(d);
		System.out.println(today);
	}
}

 

간단하게 "년도-월-일" 형태로 오늘의 날짜를 출력하는 코드를 작성했습니다.

 

SimpleDAteFormat으로 형식을 정해주고, Date를 Format에 맞춰 String에 담아 출력합니다.

 

이제 본격적으로 유효성 검사하는 코드를 작성해보겠습니다.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false);

제일 중요한 SimpleDateFormat의 setLenient를 false로 둡니다.

이렇게 하면 잘못된 형식이 되었을 때 오류를 발생시킵니다. 저 한 줄이 전부라 할 수 있습니당 !

	public void formatCheck(String date) {
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			sdf.setLenient(false);
			sdf.parse(date);
			System.out.println("날짜 형식에 맞음 : "+date);
		} catch(ParseException e) {
			System.out.println("날짜 형식에 맞지 않음 : "+date);
			e.printStackTrace();
		}
	}

 

검사하는 함수를 만들었습니다.

 

파라미터로 날짜를 받아 try-catch문으로 오류가 있으면 잡아냅니다.

메소드 타입을 void가 아닌 boolean으로 해서 try에는 return true, catch에서 오류가 잡혔을 땐 return false로 작성해도 좋을 것 같습니다.

 

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateFormatCheck {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		String goodDate = "2021-02-18";
		String wrongDate = "2021-12-32";
		
		 DateFormatCheck dateFormatCheck = new DateFormatCheck();
		 
		 System.out.println("goodDate를 넣었을 때");
		 dateFormatCheck.formatCheck(goodDate);
		 
		 System.out.println("wrongDate를 넣었을 때");
		 dateFormatCheck.formatCheck(wrongDate);
		
	}
	
	public void formatCheck(String date) {
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			sdf.setLenient(false);
			sdf.parse(date);
			System.out.println("날짜 형식에 맞음 : "+date);
		} catch(ParseException e) {
			System.out.println("날짜 형식에 맞지 않음 : "+date);
			e.printStackTrace();
		}
	}
}

전체 코드입니다.

 

goodDate에는 날짜 형식에 유효한 값, wrongDate에는 유효하지 않은 값을 넣어두고 각각 formatCheck함수에 넣어 실행시켜보았습니다.

 

코드 실행 결과

이러한 결과를 얻을 수 있습니다.

 

formatCheck(wrongDate)를 실행했을 땐 catch문에서 ParseException을 찍어주는 것을 확인할 수 있습니다.

 

또한 wrongDate에 말도 안 되는 날짜가 아닌  우리가 지정한 형식(yyyy-MM-dd)이 아닌 경우에도 예외 처리하는 모습을 볼 수 있습니다.

반응형

'DEV > JAVA' 카테고리의 다른 글

[MacOS] JAVA 설치(Brew)  (0) 2022.07.28
[JAVA] 문자열 치환 함수 replace()  (0) 2021.02.23