반응형

Java 1.8버전 이하에서는 날짜를 구하려면 Calendar 객체를 호출하고 데이트포맷을 설정하여 문자열로 받아와 출력을 해줘야 한다.

Java에서 날짜를 구하는 함수를 만들어서 공유하고자 포스팅한다.

 

오늘 날짜 구하기

Calendar cal = Calendar.getInstance();
String format = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(format);
String date = sdf.format(cal.getTime());
System.out.println(date);

오늘날짜

 

어제 날짜 구하기 - Calendar.add() 메소드 활용

Calendar cal = Calendar.getInstance();
String format = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(format);
cal.add(cal.DATE, -1); //날짜를 하루 뺀다.
String date = sdf.format(cal.getTime());
System.out.println(date);

어제

 

내일 날짜 구하기 - Calendar.add() 메소드 활용

Calendar cal = Calendar.getInstance();
String format = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(format);
cal.add(cal.DATE, +1); //날짜를 하루 더한다.
String date = sdf.format(cal.getTime());
System.out.println(date);

내일

 

세달 전 날짜 구하기 - Calendar.add() 메소드 활용

Calendar cal = Calendar.getInstance();
String format = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(format);
cal.add(cal.MONTH, -3); //세달 전
String date = sdf.format(cal.getTime());
System.out.println(date);

세달 전

 

이와 같이 Calendar 객체의 add() 메소드를 활용하여 원하는 날짜를 구하면 된다.

 

아래는 매번 호출하고 사용하는게 번거로워 만들어놓은 자바소스를 공유한다.

DateUtils.getDate()메소드에 cal Instanse객체를 넣고 원하는 날짜 이전, 이후 날짜를 입력하면 데이터가 호출된다.

 


 

Main.java

public static void main(String[] args){
    Calendar calendar = Calendar.getInstance();
    //오늘
    String today = DateUtils.getDate(cal, "date"); //오늘
    String yesterday = DateUtils.getDate(cal, "date", "date", -1); //어제
    String before4Day = DateUtils.getDate(cal, "date", "date", -4); //4일전
    String month = DateUtils.getDate(cal, "month"); //이번달
    String beforeMonth = DateUtils.getDate(cal, "month", "month", -1); //지난달
    String year = DateUtils.getDate(cal, "year"); //올해
    String before3year = DateUtils.getDate(cal, "year", "year", -3); //3년전
    System.out.println(today);
    System.out.println(yesterday);
    System.out.println(before4Day);
    System.out.println(month);
    System.out.println(beforeMonth);
    System.out.println(year);
    System.out.println(before3year);
}

 

DateUtils.java

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class DateUtils {
	
	private static final String F_YEAR = "yyyy";
	private static final String F_MONTH = "yyyy.MM";
	private static final String F_MONTH2 = "yyyy-MM";
	private static final String F_DATE = "yyyy.MM.dd";
	private static final String F_DATE2 = "yyyy-MM-dd";
	private static final String F_TIMESTAMP = "yyyy.MM.dd HH:mm:ss";

	/*******************************/
	/********** 공통사용 함수 **********/
	/*******************************/
	
	/**
	 * 날짜 출력 함수
	 * @param cal
	 * @param type
	 * @return
	 */
	public static String getDate(Calendar cal, String type) {
		return getDateFormatter(type).format(cal.getTime());
	}
	
	/**
	 * 날짜 출력 함수(이전 날짜 전용)  ex)어제, 일주일전, 지난달, 작년 등
	 * @param cal
	 * @param type
	 * @param before
	 * @param beforeValue
	 * @return
	 */
	@SuppressWarnings("static-access")
	public static String getDate(Calendar cal, String type, String before, int beforeValue){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(cal.getTime());
		SimpleDateFormat sdf = getDateFormatter(type);
		
		if(before != null && !before.trim().equals("")) {
			int beforeType = 0;
			before = before.trim().toLowerCase();
			switch(before) {
			case "year"://년
				beforeType = calendar.YEAR;
				break;
			case "month"://월
				beforeType = calendar.MONTH;
				break;
			case "week"://주
				beforeType = calendar.DATE;
				break;
			case "date"://일
				beforeType = calendar.DATE;
				break;
			}
			calendar.add(beforeType, beforeValue);
		}
		String date = sdf.format(calendar.getTime());
		return date;
	}
	
	/**
	 * SimpleDateFomat형 날짜 포맷용 설정 상수에서 가져옴
	 * @param type
	 * @return
	 */
	public static SimpleDateFormat getDateFormatter(String type) {
		if(type != null) {
			type = type.trim().toLowerCase();
			switch(type) { //상단에 선언된 상수 String형 포맷을 받아온다.
			case "year":
				type = F_YEAR;
				break;
			case "month":
				type = F_MONTH;
				break;
			case "month2":
				type = F_MONTH2;
				break;
			case "week":
				type = F_DATE;
				break;
			case "date":
				type = F_DATE;
				break;
			case "date2":
				type = F_DATE2;
				break;				
			case "timestamp":
				type = F_TIMESTAMP;
				break;
			}
			SimpleDateFormat sdf = new SimpleDateFormat(type);
			return sdf;
		}else {
			return null;
		}
	}
}

 

표시하고자 하는 형태의 구분자는 상수값에서 변경해서 쓰시면 됩니다.

ex)

private static final String F_DATE = "yyyy.MM.dd";

-> private static final String F_DATE = "yyyy-MM-dd";

반응형