小编典典

从压延机获取日期提前18年

java

我需要获取从现在起18年的完整日期(dd / mm / yyyy)。我使用代码作为Calendar calc =
Calendar.getInstance(); calc.add(Calendar.YEAR,-18);
可以在年份的18年前检索,而不是月份或日期。即使在每月第1天这样的极端情况下,我也需要比当前日期早18年的一天。例子1-06-2015当前日期应该是31-05-1997。需要注意的是我需要Java6中的代码


阅读 259

收藏
2020-11-26

共1个答案

小编典典

在Java中,日期值只是从某个固定时间点开始的毫秒数,相关类没有携带自己可以更改的格式,这就是日期/时间格式化程序的用途

日历

从您的示例中,您基本上忽略了以下事实:更改任何Calendar字段都会影响所有其他字段,例如…

Calendar cal = Calendar.getInstance();
cal.set(2015, Calendar.JUNE, 01); // Comment this out for today...
cal.add(Calendar.YEAR, -18);
cal.add(Calendar.DATE, -1);
Date date = cal.getTime();
System.out.println(new SimpleDateFormat("dd/MM/yyyy").format(date));

哪个输出

31/05/1997

但是,我建议使用Java 8的新Time API或Joda-Time

Java 8时间API

LocalDate ld = LocalDate.now();
ld = ld.minusYears(18).minusDays(1);
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy").format(ld));

哪个输出

26/06/1997

边缘盒…

LocalDate ld = LocalDate.of(2015, Month.JUNE, 1);
ld = ld.minusYears(18).minusDays(1);
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy").format(ld));

哪个输出

31/05/1997

乔达时间

LocalDate ld = new LocalDate();
ld = ld.minusYears(18).minusDays(1);
System.out.println(DateTimeFormat.forPattern("dd/MM/yyyy").print(ld));

哪个输出

26/06/1997

边缘盒…

LocalDate ld = new LocalDate(2015, DateTimeConstants.JUNE, 1);
ld = ld.minusYears(18).minusDays(1);
System.out.println(DateTimeFormat.forPattern("dd/MM/yyyy").print(ld));

哪个输出

31/05/1997
2020-11-26