Java計算年齡


實現方法

方法1

粗略計算,只對年份進行計算

import java.util.Calendar;
public class Test {
    public static void main(String[] args) {
        // 模擬輸入一個日期
        String date = "29991117";
        // 打印結果
        System.out.println(age(date));
    }
    /**
     * 計算年齡的方法
     * @param str 輸入個年月日
     * @return 年齡
     */
    public static String age(String str) {
        // 使用默認時區和語言環境獲得一個日歷
        Calendar cal = Calendar.getInstance();
        int a = Integer.parseInt((str.subSequence(0, 4).toString())); // 輸入的年
        int b = cal.get(Calendar.YEAR); // 當前的年
        if (a <= b) {
            return "年齡:" + (b - a) + "歲";
        } else {
            return "年齡計算錯誤,輸入出生時間存在未來";
        }
    }
}

方法2

計算年齡的方法,精確到日(周歲)

判斷身份證出生日期合理性

粗略判斷
  1. 出生年份大於等於當前年,且出生年大於10000年;
  2. 出生月份小於等於12,且大於0;
  3. 出生日小於等於31,且大於0;
進一步判斷
  1. 閏年2月的問題,閏年2月的日期小於等於29天;
  2. 非閏年2月的日期小於等於28天;
  3. 出生月份為4,6,9,11的日期小於等於30天;
  4. 出生年月日應當晚於或等於當前年月日;

計算年齡的方法

  1. 先看“年”,用當前年份減去生日年份得出年齡age
  2. 再看“月”,如果當前月份小於生日月份,說明未滿周歲age,年齡age需減1;如果當前月份大於等於生日月份,則說明滿了周歲age,計算over!
  3. 最后“日”,如果月份相等並且當前日小於等於出生日,說明仍未滿周歲,年齡age需減1;反之滿周歲age,over!

定義

閏年:指的能被4整除的年份,閏年的2月有29天,而非閏年的2月有28天。

import java.util.Calendar;

/**
 * Test
 */
public class Test {

    public static void main(String[] args) {
        // 模擬輸入一個日期
        String date = "19971211";

        // 打印結果
        System.out.println(getAge(date));

    }

    /**
     * @param str 18位身份證號
     * @return 年齡
     */
    public static String getAge(String str) {

        // 使用默認時區和語言環境獲得一個日歷
        Calendar cal = Calendar.getInstance();
        int a = Integer.parseInt((str.subSequence(0, 4).toString())); // 輸入的年
        int a1 = Integer.parseInt((str.subSequence(4, 6).toString())); // 輸入的月
        int a2 = Integer.parseInt((str.subSequence(6, 8).toString())); // 輸入的日
        int b = cal.get(Calendar.YEAR); // 當前的年
        int b1 = cal.get(Calendar.MONDAY) + 1; // 當前的月
        int b2 = cal.get(Calendar.DAY_OF_MONTH); // 當前的日

        // 粗略判斷
        String err = "身份證號中的出生年月日有誤";
        if (a > b || a < 1000 || a1 > 12 || a1 <= 0 || a2 > 31 || a2 <= 0) {
            return err;
        }

        // 進一步判斷
        if ((a % 4 == 0 && a1 == 2 && a2 > 29) || (a % 4 != 0 && a1 == 2 && a2 > 28)
                || ((a1 == 4 || a1 == 6 || a1 == 9 || a1 == 11) && a2 > 30)
                || (a == b && (a1 < b1 || (a1 == b1 && a2 > b2)))) {
            return err;
        }

        // 計算年齡
        int age = b - a;
        if (b1 < a1 || (b1 == a1 && b2 <= a2)) {
            age--;
        }
        return "年齡:" + age + "歲";

    }
}

參考資料

  1. 博客園 java計算年齡
  2. CSDN Java中Calendar類的常用方法
  3. CSDN Java 如何將String轉化為Int
  4. CSDN java-根據生日計算周歲


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM