如何创建计算以从两个日期获取一个人的年龄?

我正在尝试制定一种计算人的年龄的方法。 我希望计算在第二个public static int getAge 。 如果该人出生在当前日期之后,我希望它打印出错误-1。

如何比较两个SimpleDatedateBddateRef以获取age的int值?

 public static SimpleDate today() { Calendar todayCal = Calendar.getInstance(); SimpleDate todayDate = new SimpleDate(); todayDate.setDate(todayCal.get(Calendar.MONTH) + 1, todayCal.get(Calendar.DATE), todayCal.get(Calendar.YEAR)); return todayDate; public static int getAge(SimpleDate dateBd) { int age; SimpleDate dateToday = today(); age = getAge(dateBd, dateToday); return age; public static int getAge(SimpleDate dateBd, SimpleDate dateRef) { if(getAge(dateBd)>getAge(dateRef)){ system.out.println("error"); } return -1; 

什么是SimpleDate? 无论如何,这里有一些东西让你开始

  import java.util.GregorianCalendar; import java.util.Calendar; public class CalcAge { public static void main(String [] args) { // remember ... months are 0-based : jan=0 feb=1 ... System.out.println ("1962-11-11 : " + age(1962,10,11)); System.out.println ("1999-12-03 : " + age(1999,11,3)); } private static int age(int y, int m, int d) { Calendar cal = new GregorianCalendar(y, m, d); Calendar now = new GregorianCalendar(); int res = now.get(Calendar.YEAR) - cal.get(Calendar.YEAR); if((cal.get(Calendar.MONTH) > now.get(Calendar.MONTH)) || (cal.get(Calendar.MONTH) == now.get(Calendar.MONTH) && cal.get(Calendar.DAY_OF_MONTH) > now.get(Calendar.DAY_OF_MONTH))) { res--; } return res; } } 

不要尝试使用两次之间的毫秒差来计算差异,只有很多特性与日期/时间计算可能会导致各种错误的错误。

相反,节省自己(很多)时间并使用专用库

Java 8

 LocalDate start = LocalDate.of(1972, Month.MARCH, 8); LocalDate end = LocalDate.now(); long years = ChronoUnit.YEARS.between(start, end); System.out.println(years); 

哪个输出43

JodaTime

 DateTime startDate = new DateTime(1972, DateTimeConstants.MARCH, 8, 0, 0); DateTime endDate = new DateTime(); Years y = Years.yearsBetween(startDate, endDate); int years = y.getYears(); System.out.println(years ); 

哪个输出43

你甚至可以用一段Period来获得更多的颗粒感……

  Period period = new Period(startDate, endDate); PeriodFormatter hms = new PeriodFormatterBuilder() .printZeroAlways() .appendYears() .appendSeparator(" years, ") .appendMonths() .appendSeparator(" months, ") .appendDays() .appendLiteral(" days") .toFormatter(); String result = hms.print(period); System.out.println(result); 

其中打印43 years, 1 months, 5 days