我刚刚开始使用java,我正在制作一个程序,根据年龄和性别确定一个人的租车费率。此方法根据当前日期和出生日期计算人的年龄。它有点工作,但是边缘情况有问题(例如,有时它会说你24岁时你才25岁)。如何修复它以使其返回确切的年龄而不是说它有时会比你大1岁? (请不要Joda,我不能在这个作业中使用它)
public static int calcAge(int curMonth, int curDay, int curYear,int birthMonth,int birthDay,int birthYear) {
int yearDif = curYear - birthYear;
int age = 08;
if(curMonth < birthMonth) {
age = yearDif - 1;
}
if(curMonth == birthMonth) {
if(curDay < birthDay) {
age = yearDif - 1;
}
if(curDay > birthDay) {
age = yearDif;
}
}
if(curMonth > birthMonth) {
age = yearDif;
}
return age;
}
答案 0 :(得分:8)
如果你可以使用Java 8,它比joda要好得多:
LocalDate birthday = LocalDate.of(1982, 01, 29);
long yearsDelta = birthday.until(LocalDate.now(), ChronoUnit.YEARS);
System.out.println("yearsDelta = " + yearsDelta);
答案 1 :(得分:4)
在比较日期时需要检查等于
else if (curDay >= birthDay) {
age = yearDif;
}
而不是
if(curDay > birthDay) {
age = yearDif;
}
答案 2 :(得分:0)
您可以尝试使用“日期”将两个时间转换为纪元毫秒,然后简单地减去这些并通过简单的数学运算将差值转换回年份值。得到它?这将没有任何额外的库:)