Сложение двух дат в Java — программа с LocalDate и Period

В Java «эпоха» начинается с 1 января 1970 года, поэтому любое время, представленное объектом Date, отсчитывается от этой даты. При сложении двух дат через Date сумма получается смещённой примерно на 1970 лет, поэтому мы используем класс Calendar.

Чтобы понять этот пример, нужно знать:

  • Классы и объекты в Java

  • Базовый ввод и вывод в Java

Пример: сложение двух дат

import java.util.Calendar;

public class AddDates {

    public static void main(String[] args) {

        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        Calendar cTotal = (Calendar) c1.clone();

        cTotal.add(Calendar.YEAR, c2.get(Calendar.YEAR));
        cTotal.add(Calendar.MONTH, c2.get(Calendar.MONTH) + 1); // Zero-based months
        cTotal.add(Calendar.DATE, c2.get(Calendar.DATE));
        cTotal.add(Calendar.HOUR_OF_DAY, c2.get(Calendar.HOUR_OF_DAY));
        cTotal.add(Calendar.MINUTE, c2.get(Calendar.MINUTE));
        cTotal.add(Calendar.SECOND, c2.get(Calendar.SECOND));
        cTotal.add(Calendar.MILLISECOND, c2.get(Calendar.MILLISECOND));

        System.out.format("%s + %s = %s", c1.getTime(), c2.getTime(), cTotal.getTime());

    }
}

Вывод:

Tue Aug 08 10:20:56 NPT 2017 + Tue Aug 08 10:20:56 NPT 2017 = Mon Apr 16 20:41:53 NPT 4035

В этой программе c1 и c2 хранят текущую дату. Затем мы клонируем c1 и поочерёдно прибавляем все поля c2 — год, месяц, день, часы, минуты, секунды и миллисекунды.

Обратите внимание: к месяцу мы добавляем 1, потому что в Java месяцы начинаются с нуля.

Совет

В качестве альтернативы для операций с датой и временем в Java можно использовать библиотеку Joda Time.