HOME > java > examples

Java - Date에 년,월,일을 더하고 빼는 방법

JSFollow23 Mar 2019

Date에 날짜를 더하는 다양한 방법에 대해서 알아보겠습니다. Date는 1970년을 기반으로 측정된 시간이기 때문에 Calendar를 이용하여 날짜 연산을 하였습니다.

현재 시간에 날짜 더하고 빼기

현재 시간을 갖고 있는 Date객체에 월, 일을 추가하는 코드입니다. 현재 Date를 Calendar에 설정하고 add()로 날짜 연산을 하였습니다. 날짜를 빼려면 음수를 넣으면 됩니다.

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

public class Example {
    public static void main(String args[]) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("current: " + df.format(cal.getTime()));

        cal.add(Calendar.MONTH, 2);
        cal.add(Calendar.DATE, -3);
        System.out.println("after: " + df.format(cal.getTime()));
    }
}

결과

current: 2019-03-23
after: 2019-05-20

특정 날짜에 더하고 빼기

위와 동일하지만 특정 날짜의 Date를 생성하는 것이 다릅니다. 이번에는 날짜 및 시간 연산도 하였습니다.

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

public class Example {
    public static void main(String args[]) {
        Calendar cal = Calendar.getInstance();
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
        Date date = null;
        try {
            date = df.parse("2019-07-04T12:30:30+0530");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        cal.setTime(date);
        System.out.println("current: " + df.format(cal.getTime()));

        cal.add(Calendar.YEAR, 1);
        cal.add(Calendar.MONTH, 2);
        cal.add(Calendar.DATE, 3);
        cal.add(Calendar.HOUR_OF_DAY , 1);
        cal.add(Calendar.MINUTE, 20);
        cal.add(Calendar.SECOND, 10);
        System.out.println("after: " + df.format(cal.getTime()));
    }
}

결과

current: 2019-07-04T16:00:30+0900
after: 2020-09-07T17:20:40+0900

날짜 두개 더하기

두개의 Date를 더하려면 두개의 Calendar를 사용해야 합니다. Calendar.get으로 날짜를 가져올 수 있습니다. 위의 코드를 응용하여 아래와 같이 구현하면 됩니다. MONTH는 0이 1월을 의미하기 때문에(zero based) 연산을 할 때 1을 더해줘야 합니다.

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

public class Example {
    public static void main(String args[]) {
        Calendar cal = Calendar.getInstance();
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            cal.setTime(df.parse("2019-07-04"));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(new Date());
        System.out.println("cal: " + df.format(cal.getTime()));
        System.out.println("cal2: " + df.format(cal2.getTime()));

        cal.add(Calendar.YEAR, cal2.get(Calendar.YEAR));
        cal.add(Calendar.MONTH, cal2.get(Calendar.MONTH) + 1); // Zero-based months
        cal.add(Calendar.DATE, cal2.get(Calendar.DATE));
        System.out.println("after cal: " + df.format(cal.getTime()));
        System.out.println("after cal2: " + df.format(cal2.getTime()));
    }
}

결과

cal: 2019-07-04
cal2: 2019-03-23
after cal: 4038-10-27
after cal2: 2019-03-23

정리

Calendar를 이용하여 Date에 날짜 연산을 하는 방법에 대해서 알아보았습니다.