如何计算人的年龄

时间:2020-06-18 13:45:58

标签: java android

我正在尝试通过Android Atudio开发一个Android应用来计算该人的年龄。该应用程序运行时没有语法错误,但计算中出现了逻辑错误,日期为1996年12月7日,-年数和月数错误。

当我输入日期1997/6/12时,结果为23年11个月零6天,而预期结果为24年0个月零6天。

package com.example.helloworldapp;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
    public void BtnClicked(View BtnView) {
        EditText year = findViewById(R.id.year);
        EditText month = findViewById(R.id.moth);
        EditText day = findViewById(R.id.day);
        TextView result = findViewById(R.id.TV);
        int differanceOfYears = Calendar.getInstance().get(Calendar.YEAR) - Integer.parseInt(year.getText().toString());
        int differanceOfMonthes = Calendar.getInstance().get(Calendar.MONTH) - Integer.parseInt(month.getText().toString());
        int differanceOfDays = Calendar.getInstance().get(Calendar.DAY_OF_MONTH) - Integer.parseInt(day.getText().toString());
        if (differanceOfDays < 0) {
            differanceOfMonthes = differanceOfMonthes - 1;
            differanceOfDays = 30 + differanceOfDays;
        };
        if (differanceOfMonthes < 0) {
            differanceOfYears = differanceOfYears - 1;
            differanceOfMonthes = 12 + differanceOfMonthes;
        };
        int numberOfDays = differanceOfDays + differanceOfMonthes * 30 + differanceOfYears * 365;
        result.setText("you have lived for " + differanceOfYears + "" + "years, " + differanceOfMonthes + "" + "months and " + differanceOfDays + "" + "days ," + "totally" + numberOfDays + "" + "days");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

2 个答案:

答案 0 :(得分:1)

如果您选中此System.out.println(Calendar.getInstance().get(Calendar.MONTH)),即使当前月份为6月,它也会打印出5。这可能是因为日历中的月份是索引5(从0开始)的月份

从文档中:https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#MONTH

public static final int MONTH

Field number for get and set indicating the month. This is a calendar-specific 
value. The first month of the year in the Gregorian and Julian calendars is 
JANUARY which is 0; the last depends on the number of months in a year.

只需将1加到您的differanceOfMonthes

酷程序顺便说一句!

答案 1 :(得分:-2)

尝试使用日期选择器以正确的格式从用户读取日期。在editText中,用户可以用不同的格式写日期。 geeksforgeeks的这篇文章可能会帮助您理解逻辑