Java 在android中,从当前日期算起的日期验证应少于18年

Java 在android中,从当前日期算起的日期验证应少于18年,java,android,date,android-datepicker,Java,Android,Date,Android Datepicker,我必须在日期字段中进行验证,该字段必须比当前日期少18年,否则它必须显示错误 public static boolean dobdateValidate(String date) { boolean result = false; SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy"); try { Date parseddate = sdf.parse(date)

我必须在日期字段中进行验证,该字段必须比当前日期少18年,否则它必须显示错误

public static boolean dobdateValidate(String date) {
        boolean result = false;
        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
        try {
            Date parseddate = sdf.parse(date);
            Calendar c2 = Calendar.getInstance();
            c2.add(Calendar.DAY_OF_YEAR, -18);
            Date dateObj2 = new Date(System.currentTimeMillis());
            if (parseddate.before(c2.getTime())) {
                result = true;
            }

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }    
        return result;    
    }

核心问题是
日历。年中的日不正确,因为“[年中的日表示]当前年中的日数”

改用
Calendar.YEAR


其他建议:

  • 从不使用
    dateObj2
    变量,应将其删除
  • 直接返回,而不是使用中间标志变量
  • 接收日期/日历对象,并让调用者负责解析

您可以使用此方法获取年龄

/**
 * calculates age from birth date
 * 
 * @param selectedMilli
 */
private void getAge(long selectedMilli) {
    Date dateOfBirth = new Date(selectedMilli);
    Calendar dob = Calendar.getInstance();
    dob.setTime(dateOfBirth);
    Calendar today = Calendar.getInstance();
    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)
            && today.get(Calendar.DAY_OF_MONTH) < dob
                    .get(Calendar.DAY_OF_MONTH)) {
        age--;
    }

    if (age < 18) {
        //do something
    } else {

    }

    str_age = age + "";
    Log.d("", getClass().getSimpleName() + ": Age in year= " + age);
}
/**
*从出生日期开始计算年龄
* 
*@param selectedMilli
*/
私人作废获取(长选百万){
出生日期=新日期(选择百万);
Calendar dob=Calendar.getInstance();
出生日期设定时间(出生日期);
Calendar today=Calendar.getInstance();
int age=today.get(Calendar.YEAR)-dob.get(Calendar.YEAR);
如果(今天获取(日历月)
这可能会对您有所帮助不,我现在不记得时间目标了。