1. 程式人生 > >通過日期選擇器輸入時間並判斷年齡(週歲)

通過日期選擇器輸入時間並判斷年齡(週歲)

今天的我特別的高產,已經寫了三篇文章了,主要就是乘著空閒把最近遇到的問題都記錄下來

老規矩,先上圖

如果年齡小於0,則提示錯誤

xml檔案就不貼了,很簡單

實現這個功能主要用兩個方法,一個是寫一個計算週歲的方法,一開始把週歲想簡單了,居然直接減年份去了,太愚鈍了,,,

還有一個就是日期選擇器

先看程式碼吧

//日期選擇
    private void dialogDate() {
        tv_birthday_set.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new DatePickerDialog(IndividualActivity.this, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthofYear, int dayOfMonth) {
                        //顯示生日(月份要+1,因為這個方法是從0開始算的)
                        tv_birthday_set.setText(String.format("%d-%d-%d", year, monthofYear + 1, dayOfMonth));

                        Calendar cal = Calendar.getInstance();
                        String strDate = year + "-" + monthofYear + "-" + dayOfMonth;
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        Date birthDay = null;
                        try {
                            birthDay = sdf.parse(strDate);
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                        int birth = countAge(birthDay);
                        if (birth<0) {
                            Toast.makeText(getApplicationContext(), "生日輸入有誤", Toast.LENGTH_SHORT).show();
                            tv_age_set.setText("");
                        } else {
                            tv_age_set.setText(birth + "歲");
                        }

                    }
                    //設定初始的顯示日期
                }, 2000, 0, 1).show();
            }
        });
    }

這個是比較簡單的日期選擇器,當點選生日的TextView的時候設定監聽,呼叫日期選擇器,將日期顯示在TextView上,然後再呼叫週歲計算方法,通過獲取選擇的日期計算週歲並返回給年齡的TextView

下面看一下週歲計算方法

//根據生日計算年齡
    private int countAge(Date birthDay) {
        Calendar cal = Calendar.getInstance();

        if (cal.before(birthDay)) {
            throw new IllegalArgumentException(
                    "The birthDay is before Now.It's unbelievable!");
        }
        //獲得當前日期
        int yearNow = cal.get(Calendar.YEAR);
        int monthNow = cal.get(Calendar.MONTH);
        int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
        //獲得出生日期
        cal.setTime(birthDay);
        int yearBirth = cal.get(Calendar.YEAR);
        int monthBirth = cal.get(Calendar.MONTH) + 1;
        int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);

        int age = yearNow - yearBirth;
            if (monthNow <= monthBirth) {
                if (monthNow == monthBirth) {
                    if (dayOfMonthNow < dayOfMonthBirth) age--;
                } else {
                    age--;
                }
            }
            return age;

        }

 然後直接呼叫一下dialogDate()的方法就行了

因為程式碼是擷取的片段,所以方法的呼叫可能和我的原始碼有點差別,如果有問題可以告訴我。