實現方法
方法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
計算年齡的方法,精確到日(周歲)
判斷身份證出生日期合理性
粗略判斷
- 出生年份大於等於當前年,且出生年大於10000年;
- 出生月份小於等於12,且大於0;
- 出生日小於等於31,且大於0;
進一步判斷
- 閏年2月的問題,閏年2月的日期小於等於29天;
- 非閏年2月的日期小於等於28天;
- 出生月份為4,6,9,11的日期小於等於30天;
- 出生年月日應當晚於或等於當前年月日;
計算年齡的方法
- 先看“年”,用當前年份減去生日年份得出年齡age
- 再看“月”,如果當前月份小於生日月份,說明未滿周歲age,年齡age需減1;如果當前月份大於等於生日月份,則說明滿了周歲age,計算over!
- 最后“日”,如果月份相等並且當前日小於等於出生日,說明仍未滿周歲,年齡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 + "歲";
}
}