сохранить текущую дату и дату 1 год от текущего в Java

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

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

Вот что я имею на текущую дату:

DateFormat newDate = new SimpleDateFormat("MM/dd/yyyy");
Date date = new Date();
startDate = newDate.format(date);

Так, если бы это было сегодня, например, это сохраняло бы 18.02.2013. Я пытаюсь сохранить дату 18.02.2014. Как бы я поступил так?

 Makoto19 февр. 2013 г., 00:05
А как насчет ... 29.02.2016? Какие'через год?
 Brian Roach19 февр. 2013 г., 00:09

Ответы на вопрос(5)

ТЛ; др
LocalDate.parse( 
    "2/18/2013" , 
    DateTimeFormatter.ofPattern ( "M/d/uuuu" ) 
).plusYears( 1 )
подробности

принят ответ правильно, но устарело с Java 8.

java.time

java.time фреймворк, встроенный в Java 8 и более поздние версии, заменяет проблемные старые классы java.util.Date/.Calendar. Новые классы вдохновлены очень успешнымJoda времени Структура, задуманная как его преемник, похожа по концепции, но реструктурирована. ОпределяетсяJSR 310, ПродленThreeTen-Extra проект. УвидетьРуководство.

LocalDate

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

Сначала мы должны проанализировать входные данные String.форматтер java.time использует кодовые шаблоны, аналогичные старым классам, но не точно такие же. Поэтому обязательно внимательно прочитайте новый документ.

Мягкий ноль

Обратите внимание, что в вашей входной строке отсутствует начальная нулевая цифра для некоторых значений. Это означает, что вы должны использовать коды одного шаблона,M а такжеd скорее, чемMM а такжеdd, Двойные коды означают, что вы ожидаете, что нулевой отступ всегда будет включен для значений, состоящих из одной цифры,02 скорее, чем .2

String input = "2/18/2013";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "M/d/uuuu" );
LocalDate localDate = LocalDate.parse ( input , formatter );

Добавьте год. Среда java.time заботится о високосном году.

LocalDate yearLater = localDate.plusYears ( 1 );

Дамп на консоль.

System.out.println ( "localDate: " + localDate + " and yearLater: " + yearLater );

localDate: 2013-02-18 и yearLater: 2014-02-18

Околоjava.time

java.time фреймворк встроен в Java 8 и выше. Эти классы вытесняют хлопотное староенаследие классы даты и времени, такие как, &java.util.DateCalendar ,SimpleDateFormat

Joda времени проект, сейчас вРежим технического обслуживанияПосоветует миграцию наjava.time классы.

Чтобы узнать больше, см.Oracle Tutorial, И поиск переполнения стека для многих примеров и объяснений. СпецификацияJSR 310.

Вы можете обменятьjava.time объекты непосредственно с вашей базой данных. ИспользоватьДрайвер JDBC совместимый сJDBC 4.2 или позже. Нет необходимости в строках, нет необходимости вjava.sql.* классы.

Где взять классы java.time?

Java SE 8,Java SE 9,Java SE 10,Java SE 11и позже - часть стандартного Java API с комплексной реализацией.Java 9 добавляет некоторые незначительные функции и исправления.Java SE 6 а такжеJava SE 7Большинство изjava.time функциональность перенесена на Java 6 & 7 вThreeTen-Backport.AndroidБолее поздние версии реализации пакета Androidjava.time классы.Для более ранней версии Android (<26)ThreeTenABP проект адаптируетсяThreeTen-Backport (упомянутое выше). УвидетьКак использовать ThreeTenABP ....

ThreeTen-Extra Проект расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь, такие как,IntervalYearWeekYearQuarter, а такжеБольше.

 HopeKing27 июл. 2017 г., 09:14
Благодарю. Хороший пример позднего ответа, который все еще может добавить огромную ценность.
 Basil Bourque22 мая 2018 г., 17:57
Уважаемый Down-Voter, пожалуйста, оставьте критику вместе с вашим голосованием.

использованиеCalendar # add (целое поле, целое число) Метод. Вы должны использовать Calendar API, чтобы манипулировать датой и временем.

Calendar today = Calendar.getInstance(); 
Calendar nextYearToday = today;
nextYearToday.add(Calendar.YEAR, 1);
 Calendar cal = Calendar.getInstance();
        Date today = cal.getTime();
        cal.add(Calendar.YEAR, 1); // to get previous year add 1
        cal.add(Calendar.DAY_OF_MONTH, -1); // to get previous day add -1
        Date expiryDate = cal.getTime();


        System.out.println("today is --> "+today);
        System.out.println("expiryDate is --> "+expiryDate);

Выход сегодня -> Пт Дек 01 10:10:52 GMT + 05: 30 2017

expiryDate is -> Пт 30 ноября 10:10:52 GMT + 05: 30 2018

дата сегодня -> Пт Дек 01 10:10:52 GMT + 05: 30 2017

expiryDate is -> Пт 30 ноября 10:10:52 GMT + 05: 30 2018

 Keshav Gera04 дек. 2017 г., 10:27
Пожалуйста, помогите, как проверить срок годности в Java 9.
 Basil Bourque04 дек. 2017 г., 16:45
Увидетьмой ответ для кода java.time.
 Basil Bourque01 дек. 2017 г., 18:19
К вашему сведению, хлопотноDate а такжеCalendar классы теперь унаследованы, и их следует избегать. Они вытесняются классами java.time, встроенными в Java 8 и Java 9. Для Java 6 и Java 7 см.ThreeTen-Backport проект.

oneYearAfterDate = new Date(date.getTime() + DateUtils.YEAR_IN_MILLIS )

Решение Вопроса

просто используйтеcalendar.add(Calendar.YEAR, 1)

Calendar cal = Calendar.getInstance();
Date today = cal.getTime();
cal.add(Calendar.YEAR, 1); // to get previous year add -1
Date nextYear = cal.getTime();

Обратите внимание, если дата была29/Feb/2012 и вы добавили 1 год, вы получите28/Feb/2013

 Anand Kumar Jha15 июн. 2016 г., 15:39
спасибо работает нормально
 Eswar09 окт. 2018 г., 14:32
Как сделать то же самое, используя Instant? Instant.now (). ToEpochMilli () получает время использования (долго). Но как сделать так, как задано в вопросе, используя Instant?
 bardockyo19 февр. 2013 г., 00:21
спасибо @iTech, который работал прекрасно

Ваш ответ на вопрос