package com.panzhihua.common.utlis; import cn.hutool.core.util.IdcardUtil; import com.panzhihua.common.constants.Constants; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Created by qing on 2017/3/28. */ public class AgeUtils { // 根据年月日计算年龄,birthTimeString:"1994-11-14" public static int getAgeFromBirthTime(String birthTimeString) { // 先截取到字符串中的年、月、日 int selectYear = Integer.parseInt(birthTimeString.substring(0, 4)); int selectMonth = Integer.parseInt(birthTimeString.substring(4, 6)); int selectDay = Integer.parseInt(birthTimeString.substring(6, 8)); // 得到当前时间的年、月、日 Calendar cal = Calendar.getInstance(); int yearNow = cal.get(Calendar.YEAR); int monthNow = cal.get(Calendar.MONTH) + 1; int dayNow = cal.get(Calendar.DATE); // 用当前年月日减去生日年月日 int yearMinus = yearNow - selectYear; int monthMinus = monthNow - selectMonth; int dayMinus = dayNow - selectDay; int age = yearMinus;// 先大致赋值 if (yearMinus < 0) {// 选了未来的年份 age = 0; } else if (yearMinus == 0) {// 同年的,要么为1,要么为0 if (monthMinus < 0) {// 选了未来的月份 age = 0; } else if (monthMinus == 0) {// 同月份的 if (dayMinus < 0) {// 选了未来的日期 age = 0; } else if (dayMinus >= 0) { age = 1; } } else if (monthMinus > 0) { age = 1; } } else if (yearMinus > 0) { if (monthMinus < 0) {// 当前月>生日月 } else if (monthMinus == 0) {// 同月份的,再根据日期计算年龄 if (dayMinus < 0) { } else if (dayMinus >= 0) { age = age + 1; } } else if (monthMinus > 0) { age = age + 1; } } return age; } // 根据时间戳计算年龄 public static int getAgeFromBirthTime(long birthTimeLong) { Date date = new Date(birthTimeLong * 1000l); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String birthTimeString = format.format(date); return getAgeFromBirthTime(birthTimeString); } public static String getAgeFormatBirthday(String brithday) { if (StringUtils.isEmpty(brithday)) { return ""; } String year = brithday.substring(0, 4); String month = brithday.substring(4, 6); String ri = brithday.substring(6, 8); return year + "-" + month + "-" + ri; } public static int getAgeFromBirthTimes(String birthTimeString) { // 先截取到字符串中的年、月、日 int selectYear = Integer.parseInt(birthTimeString.substring(0, 4)); int selectMonth = Integer.parseInt(birthTimeString.substring(5, 7)); int selectDay = Integer.parseInt(birthTimeString.substring(8, 10)); // 得到当前时间的年、月、日 Calendar cal = Calendar.getInstance(); int yearNow = cal.get(Calendar.YEAR); int monthNow = cal.get(Calendar.MONTH) + 1; int dayNow = cal.get(Calendar.DATE); // 用当前年月日减去生日年月日 int yearMinus = yearNow - selectYear; int monthMinus = monthNow - selectMonth; int dayMinus = dayNow - selectDay; int age = yearMinus;// 先大致赋值 if (yearMinus < 0) {// 选了未来的年份 age = 0; } else if (yearMinus == 0) {// 同年的,要么为1,要么为0 if (monthMinus < 0) {// 选了未来的月份 age = 0; } else if (monthMinus == 0) {// 同月份的 if (dayMinus < 0) {// 选了未来的日期 age = 0; } else if (dayMinus >= 0) { age = 1; } } else if (monthMinus > 0) { age = 1; } } else if (yearMinus > 0) { if (monthMinus < 0) {// 当前月>生日月 } else if (monthMinus == 0) {// 同月份的,再根据日期计算年龄 if (dayMinus < 0) { } else if (dayMinus >= 0) { age = age + 1; } } else if (monthMinus > 0) { age = age + 1; } } return age - 1; } /** * 根据身份证号判断年龄段 * @param idCard 身份证号 * @return 年龄段(1.80-89周岁 2.90-99周岁 3.100周岁(含)以上) */ public static int getAgeCategory(String idCard){ int nub = -1; int age = 0; try { age = IdcardUtil.getAgeByIdCard(idCard); }catch (Exception e){ return -1; } if (age >= Constants.EIGHTY && age < Constants.NINETY) { nub = 1; }else if (age >= Constants.NINETY && age < Constants.ONE_HUNDRED){ nub = 2; }else if (age >= Constants.ONE_HUNDRED){ nub = 3; } return nub; } public static int getAgeFromBirthTimes(long birthTimeLong) { Date date = new Date(birthTimeLong * 1000l); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String birthTimeString = format.format(date); return getAgeFromBirthTimes(birthTimeString); } public static void main(String[] args) { String yese = "19980516"; String year = yese.substring(0, 4); String month = yese.substring(4, 6); String ri = yese.substring(6, 8); } }