从Date类添加年份

Sha*_*awn 14 java

让我说我有这个:

 PrintStream out = System.out;
 Scanner in = new Scanner(System.in);
 out.print("Enter a number ... ");
 int n = in.nextInt();
Run Code Online (Sandbox Code Playgroud)

我有一个随机日期,例如,05/06/2015(它不是固定日期,每次都是随机的).如果我想参加这个日期的'年',并在今年添加'n',我该怎么做?

Date类中的所有方法都不是'int'.

并且要从int中添加年份,'years'也必须是int

Jon*_*Lin 49

你需要将其转换Date为a Calendar.

Calendar c = Calendar.getInstance();
c.setTime(randomDate);
c.add(Calendar.YEAR, n);
newDate = c.getTime();
Run Code Online (Sandbox Code Playgroud)

您可以将年份(或其他字段)作为日历进行操作,然后将其转换回日期.


Ole*_*.V. 10

这个问题长期以来应该得到一个现代的答案。在Java 8中添加10年到当前日期之后,甚至更多被认为是该问题的重复。

其他的答案是在2012年精细答案岁月已经转移,今天我认为,任何人都不应使用现在已经过时的类CalendarDate,更不用提SimpleDateFormat。现代的Java日期和时间API更好用。

使用来自重复问题的示例,首先我们需要

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

这样我们可以做到:

    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);
Run Code Online (Sandbox Code Playgroud)

打印:

2027-09-12 00:00:00
Run Code Online (Sandbox Code Playgroud)

如果您不需要一天中的时间,我建议您LocalDate改用该课程,LocalDateTime因为它恰好是没有时间的日期。

    LocalDate date = dateTime.toLocalDate();
    date = date.plusYears(10);
Run Code Online (Sandbox Code Playgroud)

结果是的日期2027-09-12

问题:在哪里可以学习使用现代API?

您可以从Oracle教程开始。网上有更多资料,请搜索。


Bar*_*nka 5

课程Date不会帮助你,但Calendar课程可以:

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

请注意,您仍然需要为该f变量分配一个值。我经常使用SimpleDateFormat将字符串转换为日期。

希望这对您有帮助。


use*_*102 5

用于执行此操作的另一个包存在于org.apache.commons.lang3.time, 中DateUtils

Date date = new Date();
date = DateUtils.addYears(date, int quantity = 1);
Run Code Online (Sandbox Code Playgroud)