如何启用日期中某日期的某天自动删除0

时间:2019-04-09 09:46:07

标签: java android date date-of-birth

我想在没有Joda Time的情况下以注册表格的形式创建年龄计算器,但是我在连接整数时遇到问题。它从日期部分(例如示例04)和月份部分中删除0,因此完全错误地计算了年龄。我试图先将其放入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 个答案:

答案 0 :(得分:1)

好吧,用整数来计算年龄并不是这样的方法。

首先,现在使用Calendaris wrong。您应该使用new Java Date and Time API(在java.time包中)。 between类的Period方法似乎无法计算出这两年之间的差额:

Period.between(birthDate, currentDate);

然后您可以致电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日期和时间功能反向移植。

答案 1 :(得分:0)

Integer始终从值中删除前0。使用此方法/函数可将Int转换为{0之前为0的String

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

编辑

在您的情况下,只需使用以下几行

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));
}