Проверьте пользователя больше 18 лет с сегодняшней даты с датчиком выбора Android - PullRequest
0 голосов
/ 21 ноября 2019

Я пытаюсь проверить, что моему пользователю должно быть 18 лет. Если нет, то покажи тост. (Пытаясь получить точную сегодняшнюю дату). Но результат становится успешным только в течение года.

Результат - Годы рассчитываются. Ожидаемое - с сегодняшней даты пользователю должно быть 18 лет.

это то, что я пробовал.

    val calendar = Calendar.getInstance()
    val year = calendar.get(Calendar.YEAR)
    val month = calendar.get(Calendar.MONTH)
    val day = calendar.get(Calendar.DAY_OF_MONTH)
    val dpd = DatePickerDialog(this, DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
            calendar.set(Calendar.YEAR, year)
            calendar.set(Calendar.MONTH, monthOfYear)
            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
            val sdf = SimpleDateFormat(myFormat, Locale.US)
            val dob = sdf.format(calendar.time)

            val userAge = GregorianCalendar(year, month, day)
            val minAdultAge = GregorianCalendar()
            minAdultAge.add(Calendar.YEAR, -18)
            minAdultAge.add(Calendar.MONTH, -1)
            if (minAdultAge.before(userAge)) {
                Toast.makeText(this, getString(R.string.txt_18_years_age_validation), Toast.LENGTH_SHORT).show()
            } else {
                etDob!!.setText(dob)
            }
        }, year, month, day
    )

    dpd.datePicker.maxDate = Calendar.getInstance().timeInMillis
    dpd.show()

Какие изменения необходимы для получения проверок на сегодняшнюю дату.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2019

Я редактировал, чтобы показать, как вы можете проверить точный возраст на основе дня. Это помощь, а не решение.

public static void main (аргументы String []) {

    Calendar present = Calendar.getInstance();
    Calendar personBirthDate = Calendar.getInstance();
    personBirthDate.set(Calendar.YEAR, 2001);
    personBirthDate.set(Calendar.DAY_OF_YEAR, personBirthDate.get(Calendar.DAY_OF_YEAR) - 1); // yesterday
    int yearDiff = present.get(Calendar.YEAR) - personBirthDate.get(Calendar.YEAR);
    int dayDiff =  present.get(Calendar.DAY_OF_YEAR) - personBirthDate.get(Calendar.DAY_OF_YEAR);

    System.out.println("Day of person birth year " + personBirthDate.get(Calendar.DAY_OF_YEAR));
    System.out.println("Day of current year " + present.get(Calendar.DAY_OF_YEAR));
    System.out.println("Years between " + yearDiff);

    if(present.get(Calendar.DAY_OF_YEAR) - personBirthDate.get(Calendar.DAY_OF_YEAR) > 0){
        System.out.println("You are only " + (yearDiff - 1) + " years old");
    }else if(present.get(Calendar.DAY_OF_YEAR) - personBirthDate.get(Calendar.DAY_OF_YEAR) < 0) {
        System.out.println("You are already " + yearDiff + " years old");
    }else{
        System.out.println("You are exactly " + yearDiff + " years old");
    }

}
0 голосов
/ 21 ноября 2019

Попробуйте превратить minAdultAge и DOB в миллис для сравнения

minAdultAge.timeInMillis > dob.timeInMillis
...