我已经编写了一个程序来计算一个人的当前年龄(24 岁 10 个月 20 天),但不知何故我弄错了,尤其是在年份,而不是显示两位数字,而是显示四位数字和那也是减号,请需要一些帮助来纠正我的错误
还附上图像以显示输出
下面是我的代码,有两个类,一个是MainActivity,另一个是AgeCalculation
MainActivity 代码
public class MainActivity extends ActionBarActivity {
TextView tname, tname1, tdob, tage, tage1, tdobdisplay;
EditText editname;
Button bdate;
DatePickerDialog pickerDialog;
int startYear = 1970;
int startMonth = 1;
int startDay = 1;
private AgeCalculation age = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tname = (TextView) findViewById(R.id.textView1);
tname1 = (TextView) findViewById(R.id.textView2);
tdob = (TextView) findViewById(R.id.textView3);
tage = (TextView) findViewById(R.id.textView4);
tdobdisplay = (TextView) findViewById(R.id.textView5);
editname = (EditText) findViewById(R.id.editText1);
bdate = (Button) findViewById(R.id.button1);
tage1 = (TextView) findViewById(R.id.textView6);
age = new AgeCalculation();
bdate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pickerDialog = new DatePickerDialog(MainActivity.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
startDay = dayOfMonth;
startMonth = monthOfYear;
startYear = year;
age.setDateOfBirth(startYear, startMonth,
startDay);
String user = editname.getText().toString();
tname1.setText("Hello " + user);
tdobdisplay.setText(startDay + "-"
+ (startMonth + 1) + "-" + startYear);
calculateAge();
}
private void calculateAge() {
// TODO Auto-generated method stub
age.calcualteYear();
age.calcualteMonth();
age.calcualteDay();
Toast.makeText(
getBaseContext(),
"click the resulted button"
+ age.getResult(),
Toast.LENGTH_SHORT).show();
tage1.setText(age.getResult());
}
}, startYear, startMonth, startDay);
pickerDialog.show();
}
});
}
年龄计算代码
public class AgeCalculation {
private int startYear;
private int startMonth;
private int startDay;
private int endYear;
private int endMonth;
private int endDay;
private int resYear;
private int resMonth;
private int resDay;
private Calendar start;
private Calendar end;
public String getCurrentDate() {
end = Calendar.getInstance();
endYear = end.get(Calendar.YEAR);
endMonth = end.get(Calendar.MONTH);
endMonth++;
endDay = end.get(Calendar.DAY_OF_MONTH);
return endDay + ":" + endMonth + ":" + endYear;
}
public void setDateOfBirth(int sYear, int sMonth, int sDay) {
startYear = sYear;
startMonth = sMonth;
startMonth++;
startDay = sDay;
}
public void calcualteYear() {
resYear = endYear - startYear;
}
public void calcualteMonth() {
if (endMonth >= startMonth) {
resMonth = endMonth - startMonth;
} else {
resMonth = endMonth - startMonth;
resMonth = 12 + resMonth;
resYear--;
}
}
public void calcualteDay() {
if (endDay >= startDay) {
resDay = endDay - startDay;
} else {
resDay = endDay - startDay;
resDay = 30 + resDay;
if (resMonth == 0) {
resMonth = 11;
resYear--;
} else {
resMonth--;
}
}
}
public String getResult() {
return resYear + "-" + resMonth + "-" + resDay;
}
public long getSeconde() {
start = Calendar.getInstance();
start.set(Calendar.YEAR, startYear);
start.set(Calendar.MONTH, startMonth);
start.set(Calendar.DAY_OF_MONTH, startDay);
start.set(Calendar.HOUR, 12);
start.set(Calendar.MINUTE, 30);
start.set(Calendar.SECOND, 30);
start.set(Calendar.MILLISECOND, 30);
long now = end.getTimeInMillis();
long old = start.getTimeInMillis();
long diff = old - now;
return diff / 1000;
}
由于两个不同的结果,我附上了两张图片 在我的 calculateDay() 中,如果我更改我的 if(resMonth == 0){ resMonth=11 } ,我得到第二张图像作为输出,如果将它更改为 if(resMonth==1){resMonth=12} 我得到第一个图像输出,但我想要一个人的当前年龄(比如 24 、 25 、 30 )代替我以四位数出现的年份和减号 欢迎任何建议 谢谢你
最佳答案
您忘记在 AgeCalculation
中调用 getCurrentDate()
,这意味着 endYear
、endMonth
和endDay
从未设置,而是初始化为零 - 这解释了您的错误计算。
要解决此问题,只需将 age.getCurrentDate()
添加为 calculateAge()
函数的第一行。就在您计算年、月和日之前。
或者,由于您从未实际使用该函数,我建议从 getCurrentDate()
中提取这 5-6 行并将它们放入构造函数中。例如:
public AgeCalculation() {
end = Calendar.getInstance();
endYear = end.get(Calendar.YEAR);
endMonth = end.get(Calendar.MONTH);
endMonth++;
endDay = end.get(Calendar.DAY_OF_MONTH);
}
这样,无论何时创建新的 AgeCalculation 对象,当前日期都已设置。无需调用函数来初始化所有内容。然后,您只需删除 getCurrentDate()
函数即可。
关于android - 如何在android中显示一个人的当前年龄(25岁11个月20天)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27217221/