我正在编写一个程序,询问用户他们的出生日期,然后计算他们在不同行星的年龄。我不想假设如何输入生日,除了每个数字之间有一个空格。
我现在的代码现在不符合这些规范,我不知道如何写它。我也有计算今天我的年龄的问题。当我输入我的出生日期并打印出年龄时,它现在告诉我,当我打印出dateBirth时,我已经是407了,今天这两个日期都是正确的。
System.out.print("Please enter your birthdate (mm dd yyyy): ");
birthdate = scan.nextLine();
DateFormat df = new SimpleDateFormat("MM dd yyyy");
Date dateBirth = df.parse(birthdate);
Calendar calBirth = new GregorianCalendar();
calBirth.setTime(dateBirth);
Calendar calDay = new GregorianCalendar();
today = calDay.getTime();
age = (today.getTime() - dateBirth.getTime()) / (1000 * 60 * 60 * 24 * 365);
答案 0 :(得分:6)
1000 * 60 * 60 * 24 * 365实际上是31536000000
,它大于Integer.MAX_VALUE,这会导致溢出。作为一个整数,它将被评估为1471228928
,这会导致错误的结果。
解决方案是将 L 附加到您的一个常量
long div = ( 1000 * 60 * 60 * 24 * 365L );
long age = ( today.getTime() - dateBirth.getTime() ) / div;
答案 1 :(得分:2)
您应该检查表达式1000 * 60 * 60 * 24 * 365
是否符合您期望的结果,如果没有,请找到获得预期结果的方法。也许你甚至应该考虑到地球上,我们有所谓的闰年,你可以将你的问题标记为家庭作业。
答案 2 :(得分:2)
1000 * 60 * 60 * 24 * 365
是一个int,但它很长时间才能拥有它。使其中一个很长,如:
1000L * 60 * 60 * 24 * 365