实现方法
方法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 + "岁";
}
}