android - 如何在android中显示一个人的当前年龄(25岁11个月20天)?

标签 android

我已经编写了一个程序来计算一个人的当前年龄(24 岁 10 个月 20 天),但不知何故我弄错了,尤其是在年份,而不是显示两位数字,而是显示四位数字和那也是减号,请需要一些帮助来纠正我的错误

还附上图像以显示输出

enter image description here

enter image description here

下面是我的代码,有两个类,一个是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(),这意味着 endYearendMonthendDay 从未设置,而是初始化为零 - 这解释了您的错误计算。

要解决此问题,只需将 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/

相关文章:

java - 如何在 firebase 数据库中获取嵌套键

android - 在 AlertDialog 中打开电子邮件客户端

android - 显示来自 URL 的图像 - 大小和屏幕方向问题

android 成功发送 textview 的文本作为短信但在其他模拟器上收到无效字符

android - 如何修复 Html.fromHtml 链接焦点可见性问题(在 ICS 和 Honeycomb 中)?

android - 如何在 android studio 中用新 fragment 替换已经打开的 fragment ?

java - Android 服务运行 Activity

android - 在 Android/AndEngine 中触发一个事件?

android - 从另一个 xml 获取 linearLayout Android

android - 如何将图像添加到 android studio 中的模拟器库?