假设我有这个:
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。
您需要将
Date
转换为 Calendar
。
Calendar c = Calendar.getInstance();
c.setTime(randomDate);
c.add(Calendar.YEAR, n);
newDate = c.getTime();
您可以将年份(或其他字段)作为日历操作,然后将其转换回日期。
这个问题长期以来值得一个现代的答案。更何况在 在 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 教程开始。网上还有很多资料,你去搜一下吧
另一个用于执行此操作的包位于
org.apache.commons.lang3.time
、DateUtils
。
Date date = new Date();
date = DateUtils.addYears(date, int quantity = 1);
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
将字符串转换为日期。
希望这对您有帮助。
尝试输入
java.util.Calendar
类型。
Calendar cal=Calendar.getInstance();
cal.setTime(yourDate.getTime());
cal.set(Calendar.YEAR,n);
这会将当前日期加上 3 年并打印年份。
System.out.println(LocalDate.now().plusYears(3).getYear());
如果您需要添加一年的任何日期,请使用日历对象。
Calendar dateMoreOneYear = Calendar.getInstance();
dateMoreOneYear.setTime(dateOriginal);
dateMoreOneYear.add(Calendar.DAY_OF_MONTH, 365);
在像(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);
没有人提供一种简洁、现代的解决方案,将结果日期保留为
Date
对象:
Date startDate = ...
endDate = Date.from(startDate.toInstant().atZone(ZoneId.systemDefault())
.plusYears(1).toInstant());
试试这个......
String s = new SimpleDateFormat("YYYY").format(new Date(random_date_in_long)); //
int i = Integer.parseInt(s)+n;