在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



