Please Enable JavaScript!
Gon[ Enable JavaScript ]

[Java] 자바 날짜 계산하는 다양한 방법, GregorianCalendar, SimpleDateFormat

자바(JAVA)

[Java] 자바 날짜 계산하는 다양한 방법, GregorianCalendar, SimpleDateFormat

 

환경 : Eclipse Mars, Android 4.2.2

 

자바에서 현재날짜를 구하거나 두 날짜의 차이를 구하는 등의 다양한 날짜관련 코드에 대해 알아 보겠습니다.

 

▼ 다음 함수는 현재 날짜 구하는 방법입니다. GregorianCalendar, SimpleDateFormat, Date 클래스로 원하는 포맷에 맞게 구할수 있습니다. Calendar 에서는 get() 함수에 현재 날짜의 원하는 값을 구하기 위한 필드값만 맞춰주면 됩니다. 그중에 월을 구하는 Calendar.MONTH 에는 +1 을 해줘야 합니다. 0 부터 시작하기 때문입니다.

 

// 현재날짜 구하기 
public void doCurrentDate(){
	int nYear;
	int nMonth;
	int nDay;
	
	// 현재 날짜 구하기 
	Calendar calendar = new GregorianCalendar(Locale.KOREA);
	nYear = calendar.get(Calendar.YEAR);
	nMonth = calendar.get(Calendar.MONTH) + 1;
	nDay = calendar.get(Calendar.DAY_OF_MONTH);
	System.out.println("GregorianCalendar = " + nYear + "-"
			+ nMonth + "-" + nDay);
	
	// Date 로 구하기 
	SimpleDateFormat fm1 = new SimpleDateFormat("yyyy년MM월dd일");
	String date = fm1.format(new Date());
	System.out.println("현재시간 년월일 = " + date);

	SimpleDateFormat fm2= new SimpleDateFormat(
			"yyyy년MM월dd일HH시mm분ss초");
	String date1 = fm2.format(new Date());
	System.out.println("현재시간 시분초 = " + date1);
}

 

▼ 지정한 날짜에서 시간을 더할 때 GregorianCalendar 클래스를 사용합니다. add() 함수가 날짜에 대한 사칙연산을 하게 되는데 첫번째 인수로 연산하고 싶은 날짜 필드를 넘기시면 됩니다. 두번째 필드는 더하고 싶은 값을 넘기면 되는데 마이너스 값이면 시간을 빼게 됩니다.

 

// 년도, 월, 일 더하기 
public void doDateAdd(){
	Calendar cal = new GregorianCalendar(Locale.KOREA);
	cal.setTime(new Date());
	cal.add(Calendar.YEAR, 1); // 1년을 더한다.
	cal.add(Calendar.MONTH, 1); // 한달을 더한다. 
	cal.add(Calendar.DAY_OF_YEAR, 1); // 하루를 더한다. 
	cal.add(Calendar.HOUR, 1); // 시간을 더한다
	
	SimpleDateFormat fm = new SimpleDateFormat(
			"yyyy-MM-dd HH시mm분ss초");
	String strDate = fm.format(cal.getTime());
	System.out.println(strDate);
}

 

▼ 특정 날짜 두개에서 그 차이값을 알고 싶을 때 사용할수 있는 방법입니다. 먼저 String 으로 되어 있는 날짜를 SimpleDateFormat 이용해서 Date 객체로 바꿉니다. Date 객체의 getTime() 은 시간을 long 값으로 계산해서 리턴해줍니다. 2개의 long 값을 빼면 시간차가 나오는데 이것을 하루 단위로 바꾸기 위해 24(시간) * 60() * 60() * 1000(1000 분의 1) 곱한값을 나눕니다.

 

// 두날짜의 차이 구하기 
public void doDiffOfDate(){
	String start = "2015-04-01";
	String end = "2015-05-05";
	
	try {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		Date beginDate = formatter.parse(start);
		Date endDate = formatter.parse(end);
		
		// 시간차이를 시간,분,초를 곱한 값으로 나누면 하루 단위가 나옴
		long diff = endDate.getTime() - beginDate.getTime();
		long diffDays = diff / (24 * 60 * 60 * 1000);

		System.out.println("날짜차이=" + diffDays);
		
	} catch (ParseException e) {
		e.printStackTrace();
	}
}

 

▼ 날짜의 요일값을 알아오기 위해 Calendar get() 함수를 이용하였습니다. 인수로 Calendar.DAY_OF_WEEK 를 넘기게 되면 1 7 사이의 값중에 하나를 리턴하게 됩니다. 1이 일요일이고 7이 토요일이 되는 것이죠.

 

// 해당하는 요일 구하기 
public void doYo(){
	Calendar cal= Calendar.getInstance();
	String strWeek = null;
	
	int nWeek = cal.get ( Calendar.DAY_OF_WEEK );
	if ( nWeek == 1 ) strWeek="일요일";
	else if ( nWeek == 2 ) strWeek="월요일";
	else if ( nWeek == 3 ) strWeek="화요일";
	else if ( nWeek == 4 ) strWeek="수요일";
	else if ( nWeek == 5 ) strWeek="목요일";
	else if ( nWeek == 6 ) strWeek="금요일";
	else if ( nWeek == 7 ) strWeek="토요일";
	
	System.out.println("현재요일 = " + strWeek);
}

 

▼ 시간의 차이를 알기 위해서는 시간을 long 값으로 변경해서 빼주면 됩니다. 아래 예제는 시스템의 시간을 알아와서 그 차이 값을 계산하는 소스 입니다. 보통 소스의 실행 시간을 계산할 때 많이 쓰죠. 시간의 차이값을 계산할려면 long 값으로 바꾼후 빼면 됩니다. 시스템의 시간을 long 값으로 알아올수 있는 함수가  System.currentTimeMillis() 입니다.

 

// 시스템 경과 시간 구하기 
public void doDiffSystem(){
	try {
		long time1 = System.currentTimeMillis();
		
		Thread.sleep(1500);// 1.5 초 경과
				
		long time2 = System.currentTimeMillis();
		
		System.out.println((time2 - time1 ) / 1000.0 );
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}

 

▼ 타임존을 설정하게 되면 해당 지역의 시각을 얻어 올수 있습니다. TimeZone getTimeZone() 함수에 해당지역의 ID 값을 넘기면 됩니다. 현재 사용가능한 타임존을 알고 싶다면 TimeZone getAvailableIDs() 함수를 이용해서 데이터를 받아 보시면 됩니다.

 

public void doTimeZone(){
	// 각국 주요 도시의 현재 시각을 얻을수 있습니다. 
	TimeZone jst = TimeZone.getTimeZone("Asia/Seoul");
	Calendar cal = Calendar.getInstance(jst); 
	System.out.println ( cal.get ( Calendar.YEAR ) + "년 "
	                    + ( cal.get ( Calendar.MONTH ) + 1 ) + "월 "
	                    + cal.get ( Calendar.DATE ) + "일 "
	                    + cal.get ( Calendar.HOUR_OF_DAY ) + "시 "
	                    + cal.get ( Calendar.MINUTE ) + "분 "
	                    + cal.get ( Calendar.SECOND ) + "초 "
	                    );
}

 

▼ 시간을 계산하기 위해 long 값으로 변환한 데이터를 다시 날짜 객체로 변환하기 위한 방법입니다. long 값을 Date 객체 생성할 때 인수로 넘기면 됩니다. 이후에는 SimpleDateFormat DateFormat 클래스를 이용해서 원하는 형태의 날짜 포맷으로 변경하시면 되겠죠.

 

public void doLongDate() {
	Date curret = new Date();
	long ttl = curret.getTime();
	System.out.println(ttl);

	Date today = new Date(ttl);
	DateFormat fm = DateFormat.getDateInstance(DateFormat.FULL,
			Locale.KOREA);
	String str = fm.format(today);
	System.out.println(str);

}
Posted by 녹두장군

댓글을 달아 주세요

  1. 2015.11.07 16:30  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. 아리가또 2017.08.24 09:49  댓글주소  수정/삭제  댓글쓰기

    감사합니다!