19

假设我有这个:

 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。

4

9 回答 9

56

您需要将 转换DateCalendar.

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

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

于 2012-07-25T04:27:34.760 回答
18

这个问题早就应该得到一个现代的答案。在 Java 8 中将 10 年添加到当前日期之后更是如此,被认为是这个问题的重复。

其他答案是 2012 年的好答案。岁月流逝,今天我相信没有人应该使用现在已经过时的课程CalendarDate更不用说SimpleDateFormat. 现代 Java 日期和时间 API 使用起来要好得多。

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

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 教程开始。网上资料很多,去搜吧。

于 2017-11-09T18:09:04.610 回答
7

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

Date date = new Date();
date = DateUtils.addYears(date, int quantity = 1);
于 2019-10-10T15:45:17.087 回答
4

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将字符串转换为日期。

希望这对您有所帮助。

于 2012-07-25T04:32:33.143 回答
1

试试java.util.Calendar类型。

Calendar cal=Calendar.getInstance();
cal.setTime(yourDate.getTime());
cal.set(Calendar.YEAR,n);
于 2012-07-25T04:27:55.050 回答
1

这将使当前日期增加 3 年并打印年份。

 System.out.println(LocalDate.now().plusYears(3).getYear());
于 2020-01-16T07:29:22.043 回答
0

像这样尝试一个月和一年(2019 年 6 月)

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);
于 2019-06-27T05:56:04.977 回答
0

如果您需要在任何日期添加一年,请使用对象日历。

Calendar dateMoreOneYear = Calendar.getInstance();
dateMoreOneYear.setTime(dateOriginal);
dateMoreOneYear.add(Calendar.DAY_OF_MONTH, 365);
于 2017-02-06T09:23:57.603 回答
-2

尝试这个....

String s = new SimpleDateFormat("YYYY").format(new Date(random_date_in_long)); // 
int i = Integer.parseInt(s)+n;
于 2012-07-25T04:35:51.973 回答