我正在尝试检查用户是否超过13岁。所以我做了以下。
public boolean isUserOldEnough(String birthDay) {
Date date = null;
try {
date = new SimpleDateFormat("YYYY/MM/DD").parse(birthDay);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long birthTime = calendar.getTimeInMillis();
return birthTime > getMinAge();
}
public long getMinAge() {
Calendar calendar = Calendar.getInstance();
int currentYear = calendar.get(Calendar.YEAR);
calendar.set(currentYear - 13, Calendar.MONTH, Calendar.DAY_OF_MONTH);
return calendar.getTimeInMillis();
}
从第一种方法中,使用2000/01/21
,我得到946159200000
,而第二种方法中得到1110033481894
,如何从第一种方法中获得正确的时间?
1 : 946159200000
2 : 1110033481894
第一种方法有问题,我无法正确解决。
答案 0 :(得分:0)
您使用错误的格式"YYYY/MM/DD"
解析日期,必须使用"yyyy/MM/dd"
,然后尝试:
Date date = null;
try {
date = new SimpleDateFormat("yyyy/MM/dd").parse("2000/1/21");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
它打印:Fri Jan 21 00:00:00 EET 2000
然后尝试错误的一个:
Date date = null;
try {
date = new SimpleDateFormat("YYYY/MM/DD").parse("2000/1/21");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
它打印:Mon Jan 03 00:00:00 EET 2000
编辑:如果用户的年龄足够大,则其生日日期的毫秒数将小于13年毫秒之前的日期。
用以下代码替换您的代码:
public boolean isUserOldEnough(String birthDay) {
Date date = null;
try {
date = new SimpleDateFormat("yyyy/MM/dd").parse(birthDay);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long birthTime = calendar.getTimeInMillis();
return birthTime <= getMinAge();
}
public long getMinAge() {
Calendar calendar = Calendar.getInstance();
int currentYear = calendar.get(Calendar.YEAR);
int currentMonth = calendar.get(Calendar.MONTH);
int currentDay = calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(currentYear - 13, currentMonth, currentDay);
return calendar.getTimeInMillis();
}