我需要获得18年后的完整日期(年/月/日)。我用代码作为 Calendar calc = Calendar.getInstance(); calc.add(Calendar.YEAR,-18);在年前18年,而不是月份或日期。我需要在当前日期之前18年的一天,即使在像任何月份的第一个的角落情况下也是如此。示例1-06-2015当前日期应该是31-05-1997。需要注意的是我需要java6中的代码
答案 0 :(得分:3)
在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
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
答案 1 :(得分:1)
我建议使用Joda Time,因为它会使日期操作和数学变得非常容易。例如:
DateTime futureDate = new DateTime();
futureDate.minusYears(18).minusDays(1);
futureDate.toDate(); // return a regular Date object