不返回正确的年龄?
问题描述:
我要计算用户的年龄,我的方法犯规给出正确的年龄情况下,如果出生月份是等于当前的月份和出生当天小于或等于当天(如果用户通过日期选择器输入他的出生日期为9/4/1990或4/4/1990年龄将是21而不是22)我该如何解决这个问题?在这种情况下,我应该做些什么来获得正确的年龄?请帮我....
这是我的方法
public static String getAge(int year,int month,int day) {
Calendar dob = Calendar.getInstance();
Calendar today = Calendar.getInstance();
dob.set(year, month, day);
int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
if (today.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)){
age--;
}
Integer ageInt = new Integer(age);
String ageS = ageInt.toString();
return ageS;
}
答
有两个问题与您的代码:
- 如果出生日期是9日1990年4月,你需要以
dob.set(1990,3,9)
作为月份,从0开始==>您可能需要dob.set(year, month - 1, day);
- 如果当前年份是闰年而不是出生年份(反之亦然),并且日期在28/29之后2月,你将在同一天获得1天的差价。
这似乎是工作,但你应该用各种情景进行测试,并确保您满意的结果:
public static String getAge(int year, int month, int day) {
Calendar dob = Calendar.getInstance();
Calendar today = Calendar.getInstance();
dob.set(year, month - 1, day);
int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
if (today.get(Calendar.MONTH) < dob.get(Calendar.MONTH)) {
age--;
} else if(today.get(Calendar.MONTH) == dob.get(Calendar.MONTH)) {
if (today.get(Calendar.DAY_OF_MONTH) < dob.get(Calendar.DAY_OF_MONTH)) {
age--;
}
}
Integer ageInt = new Integer(age);
String ageS = ageInt.toString();
return ageS;
}
和A(非常简单的)测试:
public static void main(String[] args) { //today = 8 April 2012
System.out.println(getAge(1990,3,7)); //22
System.out.println(getAge(1990,3,8)); //22
System.out.println(getAge(1990,3,9)); //22
System.out.println(getAge(1990,4,7)); //22
System.out.println(getAge(1990,4,8)); //22
System.out.println(getAge(1990,4,9)); //21
System.out.println(getAge(1990,5,7)); //21
System.out.println(getAge(1990,5,8)); //21
System.out.println(getAge(1990,5,9)); //21
}
答
例如,您可以通过转换两个日期(以毫秒为单位并比日期对象)来计算差异。代码会是这样的:
long ageMilis = today.getTimeInMillis() - dob.getTimeInMillis();
Date age = new Date(ageMilis);
return age.toString();
+2
你确定吗? – Squonk 2012-04-08 21:41:04
谢谢,我会尝试第一个问题的解决方案,你能帮我解决第二个问题吗?我应该添加到代码中? – user 2012-04-08 21:35:53
看到我编辑的答案的代码 – assylias 2012-04-08 21:43:13
谢谢verrrrrry很多帮助我 – user 2012-04-08 21:45:19