Java - 날짜/시간 더하기, 빼기

LocalData, LocalDateTime, Date 객체에 날짜/시간 정보를 더하거나 빼는 방법을 소개합니다.

1. LocalData, LocalDateTime을 이용한 방법

1.1 LocalDateTime에 날짜/시간 더하기, 빼기

LocalDateTime은 아래와 같은 메소드를 이용하여 시간/날짜를 더하거나 뺄 수 있습니다.

  • plusMonths(), minusMonths()
  • plusDays(), minusDays()
  • plusHours(), minusHours()
  • plusMinutes(), minusMinutes()
  • plusSeconds(), minusSeconds()
import java.time.LocalDateTime;

public class Example {
    public static void main(String[] args) {

        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);

        LocalDateTime result = now.plusYears(10)
                .plusMonths(10)
                .plusDays(10)
                .plusHours(10)
                .plusMinutes(10)
                .plusSeconds(10);
        System.out.println(result);

        result = now.minusYears(10)
                .minusMonths(10)
                .minusDays(10)
                .minusHours(10)
                .minusMinutes(10)
                .minusSeconds(10);
        System.out.println(result);
    }
}

Output:

2022-12-18T09:28:45.974017605
2033-10-28T19:38:55.974017605
2012-02-07T23:18:35.974017605

1.2 LocalDate에 날짜/시간 더하기, 빼기

LocalData은 아래와 같은 메소드를 이용하여 시간/날짜를 더하거나 뺄 수 있습니다.

  • plusMonths(), minusMonths()
  • plusDays(), minusDays()
import java.time.LocalDate;

public class Example {
    public static void main(String[] args) {

        LocalDate now = LocalDate.now();
        System.out.println(now);

        LocalDate result = now.plusYears(10)
                .plusMonths(10)
                .plusDays(10);
        System.out.println(result);

        result = now.minusYears(10)
                .minusMonths(10)
                .minusDays(10);
        System.out.println(result);
    }
}

Output:

2022-12-17
2033-10-27
2012-02-07

2. Date, Calendar를 이용한 방법

Calendar를 이용하여 Date 객체에 날짜/시간 정보를 더하거나 빼는 방법을 소개합니다.

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

현재 시간을 갖고 있는 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()));
    }
}

Output:

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

2.2 특정 날짜에 더하고 빼기

위와 동일하지만 특정 날짜의 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()));
    }
}

Output:

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

2.3 날짜 두개 더하기

두개의 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()));
    }
}

Output:

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

Related Posts

codechachaCopyright ©2019 codechacha