2 回答

TA貢獻1853條經驗 獲得超9個贊
好吧,像這樣用整數來計算年齡并不是這樣做的方法。
首先,現在使用該類是錯誤的。您應該使用新的 Java 日期和時間 API(在包中)。該類的方法似乎計算了這兩年之間的差異:Calendar
java.time
between
Period
Period.between(birthDate, currentDate);
然后,您可以致電以獲取年份。它利用了這樣一個事實,即當我們人類說出我們的年齡時,我們根本不會將價值四舍五入。例如,如果我明天30歲,我今天仍然29歲。getYears
這應該有效:
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());

TA貢獻1780條經驗 獲得超5個贊
Integer始終從值中刪除 0 前面的值。使用此方法/函數轉換為前面的 0。IntString
// 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));
}
添加回答
舉報