Java 从日期类向随机日期添加年份

Java 从日期类向随机日期添加年份,java,Java,假设我有这个: PrintStream out = System.out; Scanner in = new Scanner(System.in); out.print("Enter a number ... "); int n = in.nextInt(); 我有一个随机日期,例如,2015年6月5日(不是固定日期,每次都是随机的)。若我想把这个日期的“年”加上今年的“n”,我该怎么做 Date类中没有一个方法是“int” 要从整数中添加年份,“年份”也必须是整数。您需要将日期转换为

假设我有这个:

 PrintStream out = System.out;
 Scanner in = new Scanner(System.in);
 out.print("Enter a number ... ");
 int n = in.nextInt();
我有一个随机日期,例如,2015年6月5日(不是固定日期,每次都是随机的)。若我想把这个日期的“年”加上今年的“n”,我该怎么做

Date类中没有一个方法是“int”


要从整数中添加年份,“年份”也必须是整数。

您需要将
日期
转换为
日历

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

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

请尝试
java.util.Calendar
键入

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

日期
类对您没有帮助,但
日历
类可以:

Calendar cal = Calendar.getInstance();
Date f;
...
cal.setTime(f);
cal.add(Calendar.YEAR, n); // Where n is int
f = cal.getTime();
请注意,您仍然必须为
f
变量指定一个值。我经常使用
SimpleDateFormat
将字符串转换为日期

希望这对你有帮助。

试试这个

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

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

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

这个问题早就应该有一个现代的答案。在被认为是这个问题的重复之后,情况更是如此

其他答案在2012年都是不错的答案。多年过去了,今天我相信没有人应该使用现在已经过时的类
日历
日期
,更不用说
简化格式
。现代的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?


你可以从这个开始。网上有更多的资料,去搜索吧。

也可以像这样尝试一个月或一年(2019年6月)


另一个这样做的包存在于
org.apache.commons.lang3.time
DateUtils

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

这将在当前日期的基础上增加3年,并打印年份

 System.out.println(LocalDate.now().plusYears(3).getYear());

如果我的约会对象是SimpleDateFormat类呢?c.设置时间(随机日期);我该怎么办?@user1519192每当你得到一个要解析为日期的字符串时,你可以使用你的
SimpleDateFormat
parse()
方法。SimpleDataFormat不是日期,它是一种日期可以表示的格式定义,用于将
日期
转换为
字符串
,反之亦然。对于闰年之类的情况,它会失败。这真是个坏主意,不包括闰年(366天)。
 System.out.println(LocalDate.now().plusYears(3).getYear());