簡體   English   中英

如何啟用日期中日期和月份的自動刪除0

[英]How to enable auto delete of 0 in day and month in a date

我想在沒有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));
}

好吧,像這樣用整數來計算年齡並不是解決問題的方法。

首先,現在使用Calendar是錯誤的 您應該使用新的Java Date and Time API (在java.time包中)。 Period類的between方法似乎無法計算出這兩年之間的差額:

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 Date and Time功能。

Integer總是從值中刪除前面的0。 使用此方法/函數可將Int轉換為前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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM