在Java中使用当前日期和出生日期计算年龄

在Java中使用当前日期和出生日期计算年龄,java,datetime,Java,Datetime,我刚从java开始,我正在制作一个程序,根据年龄和性别确定一个人的租车费率。此方法基于当前日期和出生日期计算人员的年龄。这有点管用,但有一个问题与边缘案件(例如,有时它会说你25岁时,你24岁)。我如何修正它,让它返回准确的年龄,而不是说你有时大一岁?(请不要,乔达,我不能在这项任务中使用它) public static int calage(int curMonth、int curDay、int curYear、int birthMonth、int birth、int birthYear){

我刚从java开始,我正在制作一个程序,根据年龄和性别确定一个人的租车费率。此方法基于当前日期和出生日期计算人员的年龄。这有点管用,但有一个问题与边缘案件(例如,有时它会说你25岁时,你24岁)。我如何修正它,让它返回准确的年龄,而不是说你有时大一岁?(请不要,乔达,我不能在这项任务中使用它)

public static int calage(int curMonth、int curDay、int curYear、int birthMonth、int birth、int birthYear){
int yearDif=curYear-生日;
int age=08;
如果(curMonth生日){
年龄=岁DIF;
}
}
如果(curMonth>birthMonth){
年龄=岁DIF;
}
回归年龄;
}

您可以尝试使用“日期”将这两个时间转换为历元毫秒,然后简单地减去它们,通过简单的数学运算将差值转换回年份值。了解了?这将不需要任何额外的库:)

如果您可以使用Java 8,它比joda要好得多:

    LocalDate birthday = LocalDate.of(1982, 01, 29);
    long yearsDelta = birthday.until(LocalDate.now(), ChronoUnit.YEARS);
    System.out.println("yearsDelta = " + yearsDelta);

在比较天数时,需要检查是否相等,例如

else if (curDay >= birthDay) {
    age = yearDif;
}
而不是

if(curDay > birthDay) {
    age = yearDif;
}

这不是用Java编译的,那么,真正的代码是什么?哪些输入会产生不正确的输出?这只是计算年龄的方法导致此处出现问题。当整数以
0
开头时,它被解释为八进制而不是十进制。。帮我个忙,你为什么要设定年龄?事实上,我在发帖子的时候就注意到了,但那只是我在敲击键盘。当我运行它时,它不是代码的一部分。我将年龄设置为0,因为出于某种原因,如果尚未设置该变量,它不会重新分配该变量。对于什么输入,当它应该是24时,它会显示25?也不能使用日期。是什么阻止了您?我看不出有什么理由。我不认为他们被允许作为作业的一部分“我不能在这项作业中使用它”:那么姚当然可以手动将它转换为历元毫秒。这有点令人讨厌,但在本作业中也应该起作用。AFAIK-基于JodaTime库-我认为基本上,他们必须手动完成作业,没有第三方和内置库;)JDK8日期时间库(JSR310)与Joda库由同一作者编写,被认为是一种改进了很多的重写。如果OP甚至不能使用旧的java.util.Date,那么这听起来像是一些人工作业练习,所有这些都是没有意义的。谢谢你提供的信息,这对我很有帮助,是的,我相信这是我的观点,因此我没有打断你的话,也没有对你的答案投反对票,但它仍然无法回答OP的问题;)当你考虑所有关于闰年的怪异规则时,不使用任何图书馆都是困难的。除非这个人是在2月29日出生的,闰年在考虑到这一复杂程度上并没有什么差别。即使这样,这仍然会给出一个足够好的近似值。是的,在测试时,我看到有些情况没有得到处理。要么测试是否相等,要么在开始时用yearDif初始化age。我不想给出完整答案,这样你就可以学习,而不是使用所有if语句,你应该尝试使用else if and else。在这里查看关于控制流的Java教程:我确实试过了,但由于某种原因,这使得程序无法正常工作。你能发布这些代码吗?我们也许能找出哪里出了问题。我已经对您的代码进行了编辑,并用导致您出现问题的日期进行了测试,结果是24。e、 g.我打电话给Calage(2,12013,2,21988)
if(curDay > birthDay) {
    age = yearDif;
}