Как в Java увеличить дату на один день?

Я работаю с датой в таком формате: yyyy-mm-dd.

Как я могу увеличить эту дату на один день?

Если вы используете Java 8 или новее, вы можете использовать новый api даты / времени. См. Этот ответ: stackoverflow.com/a/23910924/1115554

micha 28.05.2014 15:54

new DateTime (). plusDays (1) .toDate () ???

Pietro 27.01.2015 17:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
601
2
984 554
29

Ответы 29

Создайте объект Calendar и используйте метод add (Calendar.DATE, 1);

Используйте DateFormat API, чтобы преобразовать String в объект Date, затем используйте Calendar API, чтобы добавить один день. Дайте мне знать, если вам нужны конкретные примеры кода, и я могу обновить свой ответ.

SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );

Что-то вроде этого должно помочь:

String dt = "2008-01-01";  // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1);  // number of days to add
dt = sdf.format(c.getTime());  // dt is now the new date

c.roll (Calendar.DATE, истина); было бы несколько лучше для ясности.

Esko 09.01.2009 22:25

@Esko, c.roll (Calendar.DATE, true) не переносит месяц в последний день месяца.

Sam Hasler 01.08.2009 02:38

@ Аммар, это плохая идея, если ты ничего не понял

niccolo m. 20.12.2011 10:02

Я процитирую некоторые JavaDocs ... Calendar.DATE: "... Это синоним DAY_OF_MONTH." Я бы хотел, чтобы в JavaDocs было разъяснено, что при этом увеличиваются поля большего размера (например, месяц и год). Calendar.roll «Добавляет или вычитает (вверх / вниз) одну единицу времени в данном поле времени, не изменяя более крупные поля» .. Опять же, «большие поля» нечеткие, но это, похоже, согласуется с комментарием Сэма. Я бы хотел, чтобы был StackOverflow для исправления старых JavaDocs.

jcalfee314 30.08.2012 16:06

Обратите внимание, что сейчас многие методы Date устарели, и в любом случае следует использовать Calendar вместо Date.

Tyzoid 24.05.2013 17:45
"yyyy-MM-dd" Соблюдайте - месяц должен быть в верхнем регистре. "mm" дал бы минуты :).
anujin 31.10.2013 12:35

в Groovy (языке) это будет просто Date.parse ("yyyy-MM-dd", myDateStr) .next ()

Jocelyn 04.12.2013 14:01

ребята, к сожалению, добавлять дни через DATE, DAY_OF_MONTH или даже DAY_OF_YEAR совершенно бесполезно - все они увеличиваются по модулю. Итак, учитывая Календарь 31-12-1970, добавьте (DAY_OF_YEAR, 1) или roll (), однако roll (), наконец, вызовет add (), даст 01-01-1970. Думаю, единственный правильный способ - установить время в миллисекундах. Что касается меня, я больше никогда не использую класс Calendar.

Dmitry Gryazin 17.09.2014 18:38

@Bagzerg: Ты неправильный. add() откатит дату. Смотрите на идеона.

Jean Hominal 09.02.2015 17:14

Я бы добавил одну важную вещь: убедитесь, что часовой пояс SimpleDateFormat и Calendar совпадает. Я случайно использовал UTC в качестве часового пояса SimpleDateFormat, но использовал местный часовой пояс для объекта Calendar. UTC не соблюдает летнее время, но мой местный часовой пояс соблюдает. Итак, когда весной я увеличил календарь на 1 день, когда мы «теряем» час, UTC записал, что он увеличился только на 23 часа - и, следовательно, в тот же день. Таким образом, в приведенном выше алгоритме дважды используется один и тот же день «2012-03-11». Осенью произойдет обратное, и день «2012-11-04» будет пропущен.

user64141 14.05.2015 18:21

Вот почему я скучаю по C#. Для чего-то столь же простого, как получение даты в формате UTC или добавление дней к сегодняшней дате, требуется очень много строк кода. Полная библиотека каменного века.

developer747 05.11.2015 00:20

@ developer747 В современной Java: LocalDate.parse( "2017-01-23" ).plusDays( 1 ).toString()

Basil Bourque 27.05.2017 09:33

@SamHasler Если я добавляю 1 день к последнему дню месяца, месяц остается таким же, вместо перехода к следующему месяцу, как это сделать?

Derick Daniel 29.01.2018 15:55

К вашему сведению, ужасно неприятные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь являются наследие, вытесненными классами java.time, встроенными в Java 8 и новее. См. Руководство от Oracle.

Basil Bourque 31.07.2018 10:29

Взгляните на Joda-Time (https://www.joda.org/joda-time/).

DateTimeFormatter parser = ISODateTimeFormat.date();

DateTime date = parser.parseDateTime(dateString);

String nextDay = parser.print(date.plusDays(1));

Вы можете удалить вызовы парсера для построения DateTime. Используйте DateTime date = new DateTime (dateString); Тогда nextDay - это ISODateTimeFormat.date (). Print (date.plusDays (1)); См. joda-time.sourceforge.net/api-release/org/joda/time/… для получения дополнительной информации.

MetroidFan2002 10.01.2009 09:33

Более подробный пример кода с использованием Joda-Time см. В разделе мой ответ по аналогичному вопросу, Как добавить один день к свиданию?.

Basil Bourque 19.11.2013 04:57

К вашему сведению… Проект Joda-Time сейчас находится в режиме обслуживания и рекомендует перейти на классы java.time. Обеими усилиями руководил один и тот же человек, Стивен Коулборн. Таким образом, у них схожие концепции, и миграция несложна.

Basil Bourque 29.07.2018 23:14

Обратите внимание, что эта строка добавляет 24 часа:

d1.getTime() + 1 * 24 * 60 * 60 * 1000

но эта строка добавляет один день

cal.add( Calendar.DATE, 1 );

В дни с переходом на летнее время (25 или 23 часа) вы получите разные результаты!

Кажется, что Java намного отстает от «восьмерки» по сравнению с C#. Этот служебный метод показывает способ работы в Java SE 6 с использованием Calendar.add метод (предположительно, единственный простой способ).

public class DateUtil
{
    public static Date addDays(Date date, int days)
    {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, days); //minus number would decrement the days
        return cal.getTime();
    }
}

Чтобы добавить один день в соответствии с заданным вопросом, назовите его следующим образом:

String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);

К вашему сведению, ужасно неприятные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь являются наследие, вытесненными классами java.time, встроенными в Java 8 и новее. См. Руководство от Oracle.

Basil Bourque 31.07.2018 10:30

Я предпочитаю использовать DateUtils от Apache. Отметьте это http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html. Это удобно, особенно когда вам нужно использовать его в нескольких местах вашего проекта и вы не хотите писать для этого свой однострочный метод.

API говорит:

addDays(Date date, int amount) : Adds a number of days to a date returning a new object.

Обратите внимание, что он возвращает новый объект Date и не вносит изменений в сам предыдущий.

Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);

fyi, Date.setDate () устарел

Kelly S. French 14.08.2012 21:09

На моем компьютере это работает через месяц. После Sun Apr 30 16:25:33 CEST 2017 идет Mon May 01 16:25:33 CEST 2017. Однако это все еще обескураживающее решение. Этот метод устарел не только по уважительной причине, но и в 2017 году у нас есть очень хорошие альтернативы классу Date.

Ole V.V. 14.04.2017 17:27

Apache Commons уже имеет этот DateUtils.addDays (Date date, int amount) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java.util.Date,%20int%29, который вы используете, или вы можете использовать JodaTime, чтобы сделать его более чистым.

Date today = new Date();               
SimpleDateFormat formattedDate = new SimpleDateFormat("yyyyMMdd");            
Calendar c = Calendar.getInstance();        
c.add(Calendar.DATE, 1);  // number of days to add      
String tomorrow = (String)(formattedDate.format(c.getTime()));
System.out.println("Tomorrows date is " + tomorrow);

Это даст завтрашнюю дату. Параметры c.add(...) могут быть изменены с 1 на другое число для соответствующего приращения.

вы можете сделать что-то вроде c.setTime (объект Date), чтобы установить конкретную дату перед добавлением.

Linh Lino 06.06.2014 01:24

Я хочу, чтобы пакеты java по умолчанию делали обработку дат менее запутанной ... Я имею в виду, что это такая боль каждый раз, когда вы хотите иметь дело с датами ... просто напыщенная речь ...

Shn_Android_Dev 23.12.2017 21:12

@Shn_Android_Dev Классы java.time, встроенные в Java 8 и более поздние версии, вытесняют ужасные старые классы даты и времени и отвечают вашему желанию. Также был перенесен на Java 6/7 и более ранние версии Android в проектах ThreeTen-Backport и ThreeTenABP. Нет необходимости снова использовать Date или Calendar.

Basil Bourque 29.07.2018 23:22

java.time

В Java 8 и новее пакет java.time делает это в значительной степени автоматически. (Руководство)

Предполагая ввод и вывод String:

import java.time.LocalDate;

public class DateIncrementer {
  static public String addOneDay(String date) {
    return LocalDate.parse(date).plusDays(1).toString();
  }
}

К вашему сведению, как ZonedDateDateTime, так и OffsetDateTime также имеют методы plusDays и minusDays, а также LocalDate

Basil Bourque 16.03.2016 19:48

@BasilBourque Конечно, но информация, доступная в вопросе, касается LocalDate.

Daniel C. Sobral 16.03.2016 22:12

@DanielCSobral Ага. Просто добавляю ссылки в назидание читателям. Не критика.

Basil Bourque 17.03.2016 00:34

В Java 8 добавлен новый API для работы с датой и временем.

В Java 8 вы можете использовать следующие строки кода:

// parse date from yyyy-mm-dd pattern
LocalDate januaryFirst = LocalDate.parse("2014-01-01");

// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);

Думаю, вы имели в виду januaryFirst.plusDays(1), а не date.plusDays(1).

TeWu 11.09.2016 12:46

Поддерживается только на android O developer.android.com/reference/java/time/package-summary.ht‌ мл

Subho 18.05.2017 11:20

@Subho Для Android до 26 см. Проект ThreeTenABP, который адаптирует проект ThreeTen-Backport, бэк-порт большей части функциональности время Java для Java 6 и Java 7.

Basil Bourque 29.07.2018 23:24

Просто передайте дату в строке и количество следующих дней

 private String getNextDate(String givenDate,int noOfDays) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        String nextDaysDate = null;
    try {
        cal.setTime(dateFormat.parse(givenDate));
        cal.add(Calendar.DATE, noOfDays);

       nextDaysDate = dateFormat.format(cal.getTime());

    } catch (ParseException ex) {
        Logger.getLogger(GR_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex);
    }finally{
    dateFormat = null;
    cal = null;
    }

    return nextDaysDate;

}
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);

Это занимает количество миллисекунд с начала эпохи от oldDate и добавляет миллисекунды на 1 день, а затем использует общедоступный конструктор Date () для создания даты с использованием нового значения. Этот метод позволяет добавить 1 день или любое количество часов / минут, а не только целые дни.

Вероятно, это не то, что хотел OP; в нем не учитываются настройки перехода на летнее время, дополнительные секунды и т. д.

mrec 18.09.2014 21:08

Летнее время должно обрабатываться по часовому поясу / региону. Мой пример показывал, как увеличивать небольшую продолжительность. При увеличении на дни дополнительные секунды могут быть проблемой, но при добавлении часов это менее вероятно, хотя все же возможно.

dvaey 19.09.2014 04:15

Если вы хотите добавить одну единицу времени и ожидаете, что другие поля также будут увеличены, вы можете безопасно использовать метод добавления. См. Пример ниже:

SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(1970,Calendar.DECEMBER,31);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, 1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, -1);
System.out.println(simpleDateFormat1.format(cal.getTime()));

Распечатает:

1970-12-31
1971-01-01
1970-12-31

Нет принятого ответа, и я почувствовал общую путаницу, если и другие поля будут обновлены.

terrmith 10.02.2015 11:58

вы можете использовать Simple java.util lib

Calendar cal = Calendar.getInstance(); 
cal.setTime(yourDate); 
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();

Этот ответ дублирует содержание нескольких ответов, включая принятый ответ, полученных три года назад. Пожалуйста, удалите свой ответ или отредактируйте, чтобы добавить ценность.

Basil Bourque 30.06.2015 20:28

этот ответ чище, дата в середине не анализируется. "принятый ответ" слишком запутан. хорошо, что вы добавили свое, не обращайте внимания на автоматическое замечание Василия

Mickey Perlstein 30.11.2017 16:19

К вашему сведению, ужасно неприятные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь являются наследие, вытесненными классами java.time, встроенными в Java 8 и новее. См. Руководство от Oracle.

Basil Bourque 27.11.2018 23:29

Лучший ответ, прямо к делу. Я согласен с Микки, просто проигнорируйте комментарий Бэзила

eramirez75 27.03.2020 23:16

В java 8 вы можете использовать java.time.LocalDate

LocalDate parsedDate = LocalDate.parse("2015-10-30"); //Parse date from String
LocalDate addedDate = parsedDate.plusDays(1);   //Add one to the day field

Вы можете преобразовать в объект java.util.Date следующим образом.

Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Вы можете преобразовать LocalDate в строку следующим образом.

String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

Если вы используете Java 8, java.time.LocalDate и java.time.format.DateTimeFormatter могут упростить эту работу.

public String nextDate(String date){
      LocalDate parsedDate = LocalDate.parse(date);
      LocalDate addedDate = parsedDate.plusDays(1);
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd");
      return addedDate.format(formatter); 
}

Еще проще: отбросьте форматтер и просто используйте toString() для создания строки в формате yyyy-MM-dd (и если вы настаиваете, помните, что mm - это минуты, а MM - месяц).

Ole V.V. 14.04.2017 13:49

Поскольку Java 1.5, TimeUnit.DAYS.toMillis (1) мне кажется более чистым.

SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Date day = dateFormat.parse(string);
// add the day
Date dayAfter = new Date(day.getTime() + TimeUnit.DAYS.toMillis(1));

Это создает значение даты и времени, где в вопросе запрашивается только дата. Я предлагаю гораздо более мудрый подход - это класс LocalDate в классах java.time для Java 8 и более поздних версий, а также обратный порт для Java 6 и Java 7, найденный в проекте ThreeTen-Backport.

Basil Bourque 25.02.2017 01:10

Если вы используете Java 8, сделайте это так.

LocalDate sourceDate = LocalDate.of(2017, Month.MAY, 27);  // Source Date
LocalDate destDate = sourceDate.plusDays(1); // Adding a day to source date.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // Setting date format

String destDate = destDate.format(formatter));  // End date

Если вы хотите использовать SimpleDateFormat, сделайте это так.

String sourceDate = "2017-05-27";  // Start date

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(sourceDate)); // parsed date and setting to calendar

calendar.add(Calendar.DATE, 1);  // number of days to add
String destDate = sdf.format(calendar.getTime());  // End date

Нет, вопрос запрашивал значение только даты, а не дату и время. Поэтому используйте класс LocalDate, а не LocalDateTime.

Basil Bourque 27.05.2017 09:31

Ваш ответ повторяет содержание как минимум четырех других ответов. Пожалуйста, объясните, чем ваша добавленная стоимость помимо этого, или удалите, прежде чем собирать голоса против.

Basil Bourque 27.05.2017 09:39

Это очень просто, попытаться объяснить простым словом. получите сегодняшнюю дату, как показано ниже

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);

Теперь установите эту дату на день вперед с помощью метода calendar.add, который принимает (константа, значение). Здесь константа может быть ДАТА, часы, минуты, секунды и т. д., А значение - это значение константы. Как и для одного дня, константа впереди - Calendar.DATE, и ее значение равно 1, потому что нам нужно значение на один день вперед.

System.out.println(calendar.getTime());// print modified date which is завтрашнее свидание

Спасибо

Вы можете использовать этот пакет из "org.apache.commons.lang3.time":

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 Date myNewDate = DateUtils.addDays(myDate, 4);
 Date yesterday = DateUtils.addDays(myDate, -1);
 String formatedDate = sdf.format(myNewDate);  

Предлагать класс Date в 2018 году - плохой совет. Неприятные старые классы даты и времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleDateFormat, теперь являются наследие, вытесненными классами java.time, встроенными в Java 8 и Java 9. См. Руководство от Oracle. См. Другие ответы с использованием класса LocalDate.

Basil Bourque 27.02.2018 22:55

Да, это лучший способ сделать это LocalDate,

Shaheed 28.02.2018 23:06

однако у некоторых фреймворков, таких как jsf, есть небольшие проблемы с интеграцией с API времени, поэтому иногда следует использовать Date; плюс среда java <8

Lucke 27.07.2018 11:01

@Lucke Большая часть функциональности java.time была перенесена на Java 6 и 7 в проекте ThreeTen-Backport. Дальнейшая адаптация к более старому Android в проекте ThreeTenABP. Так что действительно не нужно прикасаться к этим чертовски ужасным старым классам свидания. Обновлены многие фреймворки. Но не все. Поэтому, если вам необходимо взаимодействовать со старым кодом, который еще не обновлен до java.time, напишите новый код в java.time и конвертируйте в / из старых типов, вызывая новые методы преобразования, добавленные к старым классам.

Basil Bourque 29.07.2018 23:28

Этот код игнорирует важный вопрос часового пояса. В любой момент дата меняется в зависимости от зоны. К сожалению, класс SimpleDateFormat вводит часовой пояс, неявно применяя текущий пояс JVM по умолчанию. Таким образом, результаты этого кода будут зависеть от текущего значения по умолчанию - и это значение по умолчанию может измениться в любой момент времени выполнения в течение.

Basil Bourque 27.11.2018 23:28

В Java 8 простой способ сделать это:

Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))

Кажется, немного натянуто. Почему бы просто не пойти с Instant.now().plus( 1 , ChronoUnit.DAYS )?

Basil Bourque 31.07.2018 10:28

Спасибо @BasilBourque

dpk 31.07.2018 12:24

Давайте проясним случай использования: вы хотите выполнить календарную арифметику и начать / закончить с java.util.Date.

Некоторые подходы:

  1. Преобразование в строку и обратно с помощью SimpleDateFormat: это неэффективное решение.
  2. Преобразовать в LocalDate: вы потеряете любую информацию о времени суток.
  3. Преобразовать в LocalDateTime: это включает в себя больше шагов, и вам нужно беспокоиться о часовом поясе.
  4. Преобразовать в эпоху с помощью Date.getTime (): это эффективно, но вы рассчитываете в миллисекундах.

Рассмотрите возможность использования java.time.Instant:

Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);

Никогда не смешивайте ужасные устаревшие классы, такие как Date, с современными классами java.time, такими как Instant. Классы java.time полностью вытесняют унаследованные классы. В частности, Instant заменяет java.util.Date.

Basil Bourque 27.11.2018 23:21
Не решает вопрос. Вы используете классы, представляющие момент (дату со временем дня в контексте смещения или зоны). Но вопрос спрашивает только о дате без времени суток и без часового пояса. Смотрите правильный ответ Собрала и правильный ответ Михаила.
Basil Bourque 27.11.2018 23:25
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender

Спасибо за желание внести свой вклад. Однако это уже есть в нескольких других ответах, поэтому я действительно не вижу смысла ... Кроме этого, IMHO никто не должен использовать плохо спроектированный и давно устаревший класс Calendar в 2019 году.

Ole V.V. 18.02.2019 12:19

На мой взгляд, лучший ответ из всех вышеперечисленных.

Hassan Jamil 25.01.2021 10:55

На самом деле все просто. Один день содержит 86400000 миллисекунд. Итак, сначала вы получите текущее время в миллисекундах от Системы, используя System.currentTimeMillis(), а затем добавьте 84000000 миллисекунд и используйте класс Date для создания формата даты в миллисекундах.

Пример

String Today = new Date(System.currentTimeMillis()).toString();

String Сегодня будет 2019-05-9

String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();

String Tommorow будет 10 мая 2019 г.

String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();

String DayAfterTommorow будет 2019-05-11

Этот код использует ужасный класс Date, который несколько лет назад был вытеснен современными классами java.time. Намного проще использовать: LocalDate.parse( "2019-01-23" ).plusDays( 1 )

Basil Bourque 09.05.2019 18:31

С Java SE 8 или выше вы должны использовать новый Дата / время API

 int days = 7;       
 LocalDate dateRedeemed = LocalDate.now();
 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");

 String newDate = dateRedeemed.plusDays(days).format(formatter);   
 System.out.println(newDate);

Если вам нужно преобразовать java.util.Date в java.time.LocalDate, вы можете использовать этот метод.

  public LocalDate asLocalDate(Date date) {
      Instant instant = date.toInstant();
      ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
      return zdt.toLocalDate();
  }

С версией до Java SE 8 вы можете использовать Джода-Тайм

Joda-Time provides a quality replacement for the Java date and time classes and is the de facto standard date and time library for Java prior to Java SE 8

   int days = 7;       
   DateTime dateRedeemed = DateTime.now();
   DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/uuuu");
        
   String newDate = dateRedeemed.plusDays(days).toString(formatter);   
   System.out.println(newDate);

Попробуйте этот метод:

public static Date addDay(int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.DATE, day);
        return calendar.getTime();
}

Это выглядит правильно, но классы Calendar и Date плохо спроектированы и давно устарели, поэтому это не рекомендуемый способ. Предпочитаю LocalDate.now(ZoneId.systemDefault()).plusDays(day). Также я не вижу, чтобы вы вносили что-то важное, чего нет во втором по количеству голосов ответе Лизы.

Ole V.V. 15.01.2021 17:38

Здравствуйте, я полностью согласен с вами, но я не видел второго по количеству голосов ответов до публикации своего.

Rachid Azzanati 18.01.2021 13:02

Другие вопросы по теме