Добавление классов Years from Date

Скажем, у меня есть это:

 PrintStream out = System.out;
 Scanner in = new Scanner(System.in);
 out.print("Enter a number ... ");
 int n = in.nextInt();

У меня есть случайная дата, например, 05/06/2015 (ее не фиксированная дата, ее случайность каждый раз). Если я хочу взять "год" этой даты и добавить все, что "n" в этом году, как это сделать?

все методы класса Date не являются "int".

и добавить годы из int, 'years' должен быть также int,

Ответ 1

Вам нужно преобразовать Date в Calendar.

Calendar c = Calendar.getInstance();
c.setTime(randomDate);
c.add(Calendar.YEAR, n);
newDate = c.getTime();

Вы можете манипулировать Годом (или другими полями) в качестве Календаря, а затем преобразовывать его в Дату.

Ответ 2

Этот вопрос давно заслуживает современного ответа. И даже более того, после добавления 10 лет к текущей дате в Java 8 был сочтен дубликатом этого вопроса.

Другие ответы были хорошими в 2012 году. Прошли годы, и сегодня я считаю, что никто не должен использовать устаревшие классы Calendar и Date, не говоря уже о SimpleDateFormat. Современный API даты и времени Java намного приятнее работать.

Используя пример из этого дублирующего вопроса, сначала нам нужно

private static final DateTimeFormatter formatter 
        = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");

С этим мы можем сделать:

    String currentDateString = "2017-09-12 00:00:00";
    LocalDateTime dateTime = LocalDateTime.parse(currentDateString, formatter);
    dateTime = dateTime.plusYears(10);
    String tenYearsAfterString = dateTime.format(formatter);
    System.out.println(tenYearsAfterString);

Это печатает:

2027-09-12 00:00:00

Если вам не нужно время суток, я рекомендую класс LocalDate вместо LocalDateTime поскольку это точно дата без времени суток.

    LocalDate date = dateTime.toLocalDate();
    date = date.plusYears(10);

Результатом является дата 2027-09-12.

Вопрос: где я могу научиться использовать современный API?

Вы можете начать с учебника по Oracle. Theres гораздо больше материала в сети, иди искать.

Ответ 3

Класс Date не поможет вам, но класс Calendar может:

Calendar cal = Calendar.getInstance();
Date f;
...
cal.setTime(f);
cal.add(Calendar.YEAR, n); // Where n is int
f = cal.getTime();

Обратите внимание, что вам все равно нужно присвоить значение переменной f. Я часто использую SimpleDateFormat для преобразования строк в даты.

Надеюсь, это поможет вам.

Ответ 4

Попробуйте тип java.util.Calendar.

Calendar cal=Calendar.getInstance();
cal.setTime(yourDate.getTime());
cal.set(Calendar.YEAR,n);

Ответ 5

Если вам нужно добавить один год, любая дата использует объект Calendar.

Calendar dateMoreOneYear = Calendar.getInstance();
dateMoreOneYear.setTime(dateOriginal);
dateMoreOneYear.add(Calendar.DAY_OF_MONTH, 365);

Ответ 6

Попробуйте так же на месяц и год (июнь 2019)

Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, n); //here n is no.of year you want to increase
SimpleDateFormat format1 = new SimpleDateFormat("MMM YYYY");
System.out.println(cal.getTime());

String formatted = format1.format(cal.getTime());
System.out.println(formatted);

Ответ 7

Другой пакет для этого существует в org.apache.commons.lang3.time, DateUtils.

Date date = new Date();
date = DateUtils.addYears(date, int quantity = 1);

Ответ 8

Попробуйте это....

String s = new SimpleDateFormat("YYYY").format(new Date(random_date_in_long)); // 
int i = Integer.parseInt(s)+n;