개발이야기/Java

[Java] Calendar, Date 클래스 활용해서 날짜 계산하고 더하기

후린개발자 2024. 2. 2.
반응형

Calendar 클래스와 Date 클래스를 이용하여 날짜 및 시간 관련 기능을 수행하는 소스코드입니다. 현재 날짜를 가져와 만들고 특정 날짜도 출력하며 현재 날짜를 계산해서 더하기를 다양한 방법으로 하고 있습니다.

Calendar 객체를 사용시 매번 인스턴스화해야 하기 때문에 소스가 지저분해질 수 있어 공통으로 정의해 놓고 사용하시면 편리합니다.

 

 

1. 메서드

1) getYear, getMonth, getDay, getHour, getMinute, getSecond

-Date 객체로부터 년, 월, 일, 시, 분, 초를 추출합니다.

2) makeDate

-년, 월, 일, 시, 분, 초를 받아서 Date 객체를 생성합니다. Calendar 클래스를 사용하며, 월에 대해서는 0부터 시작하므로 1을 빼서 설정합니다.

3) addMonths, addDays, addHours, addMinutes, addSeconds

-Date에 월, 일, 시, 분, 초를 각각 더한 새로운 Date 객체를 반환합니다.

4) getDateStrByPattern

-Date 객체를 주어진 패턴에 맞추어 문자열로 변환하여 반환합니다.

 

 

2. 소스코드

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

public class TEST {
    public static void main(String[] args) throws Exception {
        // 현재 날짜 가져오기
        Date currentDate = new Date();

        // 현재 날짜로부터 연, 월, 일, 시, 분, 초 추출
        int year = getYear(currentDate);
        int month = getMonth(currentDate);
        int day = getDay(currentDate);
        int hour = getHour(currentDate);
        int minute = getMinute(currentDate);
        int second = getSecond(currentDate);
        
        // 현재 날짜 및 추출한 값 출력
        System.out.println("Current Date: " + getDateStrByPattern(currentDate, "yyyy-MM-dd HH:mm:ss"));
        System.out.println("Year: " + year);
        System.out.println("Month: " + (month + 1)); // Month is zero-based in Calendar, so add 1
        System.out.println("Day: " + day);
        System.out.println("Hour: " + hour);
        System.out.println("Minute: " + minute);
        System.out.println("Second: " + second);

        // 특정 날짜와 시간으로부터 Date 객체 생성 및 출력
        Date customDate = makeDate(2023, 5, 15, 14, 30, 0);
        System.out.println("Custom Date: " + getDateStrByPattern(customDate, "yyyy-MM-dd HH:mm:ss"));

        // 현재 날짜에 3개월 더하기 및 출력
        Date futureDate = addMonths(currentDate, 3);
        System.out.println("Future Date (+3 months): " + getDateStrByPattern(futureDate, "yyyy-MM-dd HH:mm:ss"));

        // 현재 날짜에 7일 더하기 및 출력
        Date nextWeek = addDays(currentDate, 7);
        System.out.println("Next Week (+7 days): " + getDateStrByPattern(nextWeek, "yyyy-MM-dd HH:mm:ss"));

        // 현재 시간에 2시간 더하기 및 출력
        Date laterTime = addHours(currentDate, 2);
        System.out.println("Later Time (+2 hours): " + getDateStrByPattern(laterTime, "yyyy-MM-dd HH:mm:ss"));
    }
    
    /**
     * getYear 
    * <pre>Date 에서 Year 값 추출</pre>
    * @param date
    * @return int
    */
   public static int getYear(Date date) {
      Calendar cal = Calendar.getInstance();
      cal.setTime(date);
      return cal.get(Calendar.YEAR);
  }
  
  /**
   *  getMonth
    * <pre>Date 에서 Month 값 추출</pre>
    * @param date
    * @return int
    */
   public static int getMonth(Date date) {
      Calendar cal = Calendar.getInstance();
      cal.setTime(date);
      return cal.get(Calendar.MONTH);
  }
   
  /**
   *  getDay
    * <pre>Date 에서 day 값 추출</pre>
    * @param date
    * @return int
    */
   public static int getDay(Date date) {
      Calendar cal = Calendar.getInstance();
      cal.setTime(date);
      return cal.get(Calendar.DAY_OF_MONTH );
  }
   
   /**
    * getHour
    * <pre>Date 에서 Year 값 추출</pre>
    * @param date
    * @return int
    */
   public static int getHour(Date date) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       return cal.get(Calendar.HOUR_OF_DAY);
   }
   
   /**
    * getMinute
    * <pre>Date 에서 Month 값 추출</pre>
    * @param date
    * @return int
    */
   public static int getMinute(Date date) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       return cal.get(Calendar.MINUTE);
   }
   
   /**
    * getSecond
    * <pre>Date 에서 day 값 추출</pre>
    * @param date
    * @return int
    */
   public static int getSecond(Date date) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       return cal.get(Calendar.SECOND);
   }
   
   
   /**
    * makeDate
    * <pre>Date 생성 (int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)</pre>
    * @param year
    * @param month
    * @param date
    * @param hourOfDay
    * @param minute
    * @param second
    * @return Date
    */
   public static Date makeDate(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) {
      Calendar cal = Calendar.getInstance();
      cal.set(Calendar.YEAR , year);
      cal.set(Calendar.MONTH, month - 1); // Subtract 1 to adjust for zero-based indexing
      cal.set(Calendar.DAY_OF_MONTH , dayOfMonth);
      cal.set(Calendar.HOUR_OF_DAY , hourOfDay);
      cal.set(Calendar.MINUTE , minute);
      cal.set(Calendar.SECOND , second);
      return cal.getTime();
  }
   
   /**
    * addMonths
    * <pre>Date + months (월)</pre>
    * @param date
    * @param months
    * @return Date
    */
   public static Date addMonths(Date date, int months) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       cal.add(Calendar.MONTH, months);
       return cal.getTime();
       
   }
   
   
   /**
    * addDays
    * <pre>Date + days (일)</pre>
    * @param date
    * @param days
    * @return Date
    */
   public static Date addDays(Date date, int days) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       cal.add(Calendar.DATE, days);
       return cal.getTime();
       
   }
   
   /**
    * addHours
    * <pre>Date + hours (시)</pre>
    * @param date
    * @param hours
    * @return Date
    */
   public static Date addHours(Date date, int hours) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       cal.add(Calendar.HOUR, hours);
       return cal.getTime();
       
   }
   
   /**
    * addMinutes
    * <pre>Date + mins (분)</pre>
    * @param date
    * @param mins
    * @return Date
    */
   public static Date addMinutes(Date date, int mins) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       cal.add(Calendar.MINUTE, mins);
       return cal.getTime();
       
   }
   
   /**
    * addSeconds
    * <pre>Date + secs (초)</pre>
    * @param date
    * @param secs
    * @return Date
    */
   public static Date addSeconds(Date date, int secs) {
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);
       cal.add(Calendar.SECOND, secs);
       return cal.getTime();
       
   }
   
   /**
    * addSeconds
    * <pre>Date -> String </pre>
    * @param date
    * @param pattern
    * @return String
    */
   public static String getDateStrByPattern(Date date, String pattern) {
       DateFormat df = new SimpleDateFormat(pattern);
       return df.format(date);
   }
}

 

 


 

Console 결과

반응형

댓글

💲 추천 글