从日历上提前18年



我需要得到完整的日期(dd/mm/yyyy),即18年后。我使用代码作为Calendar calc=Calendar.getInstance();计算日期(日历年,-18);它在年前18年而不是月或日进行重审。我需要在当前日期前18年的一天,即使是在任何一个月的1日这样的情况下。示例1-06-2015是当前日期,应为1997年5月31日。需要注意的是,我需要java6 中的代码

在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

JodaTime

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

我建议使用Joda Time,因为它会使日期操作和数学计算变得非常容易。例如:

DateTime futureDate = new DateTime();
futureDate.minusYears(18).minusDays(1);
futureDate.toDate(); // return a regular Date object

相关内容

  • 没有找到相关文章

最新更新