Как включить автоматическое удаление 0 в день и месяц в дате - PullRequest
0 голосов
/ 09 апреля 2019

Я хотел бы создать калькулятор возраста в форме регистра без Joda Time, но у меня проблема с конкатенацией int.Он удаляет компонент 0 из дня (в примере 04) и компонент месяца, поэтому он полностью просчитывает возраст.Я пытался поместить его сначала в String, затем в int, но это не сработало.

private void setAge(View view) {

    Calendar calendarB = Calendar.getInstance();
    int years = calendarB.get(Calendar.YEAR);
    int month = calendarB.get(Calendar.MONTH);
    int day = calendarB.get(Calendar.DAY_OF_MONTH);
    //int
    currentDate = Integer.valueOf(String.valueOf(years) + String.valueOf(month + 1) + String.valueOf(day));

    Calendar calendar = Calendar.getInstance();

    datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            //int
            birthDate = Integer.valueOf(String.valueOf(year) + String.valueOf(monthOfYear + 1) + String.valueOf(dayOfMonth));

            ageI = (currentDate - birthDate) / 10000;

            String age = Integer.toString(ageI);
            birth.setText(age);

            datePickerDialog.dismiss();
        }
    }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Ну, жонглировать, как это, целыми числами, чтобы вычислить возраст, не способ сделать это.

Во-первых, использование Calendar класса в наше время неправильно .Вам следует использовать новый Java Date and Time API (в пакете java.time).* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * getYears * * * * * * * * * * * * * * * * * * * * * * * *.Он использует тот факт, что когда мы, люди, говорим о нашем возрасте, мы вообще не округляем значение.Например, если мне завтра исполнится 30 лет, мне сегодня еще 29 лет.

Это должно сработать:

final LocalDate now = LocalDate.now();
datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        LocalDate birthDate = LocalDate.of(year, monthOfYear, dayOfMonth);
        int age = Period.between(birthDate, now).getYears();
        birth.setText(String.valueOf(age));

        datePickerDialog.dismiss();
    }
}, now.getYear(), now.getMonthValue(), now.getDayOfMonth());

Если вам нужноцелевые уровни API ниже 26, тогда вы можете использовать ThreeTen ABP , который поддерживает функциональность даты и времени Java 8.

0 голосов
/ 09 апреля 2019

Integer всегда удаляет предшествующий 0 из значения.Используйте этот метод / функцию для преобразования Int в String с предшествующим 0.

 // ADDS 0  e.g - 02 instead of 2
    public String checkDigit (int number) {
        return number <= 9 ? "0" + number : String.valueOf(number);
    }

EDIT

В вашем случае просто используйте эти строки

private void setAge(View view) {

Calendar calendarB = Calendar.getInstance();
int years = calendarB.get(Calendar.YEAR);
int month = calendarB.get(Calendar.MONTH);
int day = calendarB.get(Calendar.DAY_OF_MONTH);
//int
currentDate = Integer.valueOf(String.valueOf(years) + String.valueOf(month + 1) + String.valueOf(day));

Calendar calendar = Calendar.getInstance();
Calendar dob = Calendar.getInstance();

datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        //int
        birthDate = Integer.valueOf(String.valueOf(year) + String.valueOf(monthOfYear + 1) + String.valueOf(dayOfMonth));

        // New code
        dob.set(year, month, day); 
        int age = calendar.get(Calendar.YEAR) - dob.get(Calendar.YEAR);

        if (calendar.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)){
            age--; 
        }

        String age = checkDigit(age);
        birth.setText(age);

        datePickerDialog.dismiss();
    }
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
}
...