将年份添加到日期类中的随机日期

问题描述 投票:0回答:10

假设我有这个:

 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。

java
10个回答
61
投票

您需要将

Date
转换为
Calendar

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

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


22
投票

这个问题长期以来值得一个现代的答案。更何况在 在 Java 8 中添加 10 年到当前日期 被认为是这个问题的重复。

其他答案在2012年都是很好的答案。岁月流逝,今天我相信没有人应该使用现在过时的类

Calendar
Date
,更不用说
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 教程开始。网上还有很多资料,你去搜一下吧


9
投票

另一个用于执行此操作的包位于

org.apache.commons.lang3.time
DateUtils

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

5
投票

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

希望这对您有帮助。


1
投票

尝试输入

java.util.Calendar
类型。

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

1
投票

这会将当前日期加上 3 年并打印年份。

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

0
投票

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

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

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);

0
投票

没有人提供一种简洁、现代的解决方案,将结果日期保留为

Date
对象:

Date startDate = ...
endDate = Date.from(startDate.toInstant().atZone(ZoneId.systemDefault())
    .plusYears(1).toInstant());

-2
投票

试试这个......

String s = new SimpleDateFormat("YYYY").format(new Date(random_date_in_long)); // 
int i = Integer.parseInt(s)+n;
© www.soinside.com 2019 - 2024. All rights reserved.