|  |  |  | 
|---|
|  |  |  | import java.text.DateFormat; | 
|---|
|  |  |  | import java.text.ParseException; | 
|---|
|  |  |  | import java.text.SimpleDateFormat; | 
|---|
|  |  |  | import java.time.LocalDateTime; | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Calendar; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 日期格式化,转换工具类 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @author Ron | 
|---|
|  |  |  | * @createTime 2014.08.30 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 返回年份 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | *            日期 | 
|---|
|  |  |  | * @return 返回年份 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 返回月份 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | *            日期 | 
|---|
|  |  |  | * @return 返回月份 | 
|---|
|  |  |  | 
|---|
|  |  |  | c.setTime(date); | 
|---|
|  |  |  | return c.get(Calendar.MONTH) + 1; | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 日期转字符串 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @param format | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 字符串转日期 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param dateStr | 
|---|
|  |  |  | * @param format | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | return fmt.parse(dateStr); | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 判断给定的日期是一周中的第几天,注意:按照中国的习惯,周日是第七天 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 指定时间的下一天 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | cal.add(Calendar.DATE, 1); | 
|---|
|  |  |  | return cal.getTime(); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 指定时间的前一天 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | cal.add(Calendar.DATE, -1); | 
|---|
|  |  |  | return cal.getTime(); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 指定时间的下N天 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | cal.add(Calendar.DATE, nDay); | 
|---|
|  |  |  | return cal.getTime(); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 指定时间的前N天 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | cal.add(Calendar.DATE, -nDay); | 
|---|
|  |  |  | return cal.getTime(); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取一天的起始时间 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | return fmt.parse(dateStr); | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return date; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取一天的结束时间 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | return fmt.parse(dateStr); | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return date; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * currentDat是否在referenceDate日期之前 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param referenceDate | 
|---|
|  |  |  | * @param currentDat | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * currentDat是否在referenceDate日期之后 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param referenceDate | 
|---|
|  |  |  | * @param currentDat | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 判断currentDate是否在startDate和endDate之间,不包括startDate和endDate | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param startDate | 
|---|
|  |  |  | * @param endDate | 
|---|
|  |  |  | * @param currentDate | 
|---|
|  |  |  | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取startDate到endDate之间的星期day(中文星期)不包括startDate和endDate | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param startDate | 
|---|
|  |  |  | * @param endDate | 
|---|
|  |  |  | * @param day | 
|---|
|  |  |  | 
|---|
|  |  |  | return listDate; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * date转换成Timestamp | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @param format | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取早中晚 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param time | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取早中晚的开始时间 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @param time | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取早中晚的结束时间 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @param time | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 得到几天前的时间 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param d | 
|---|
|  |  |  | * @param day | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 得到几天后的时间 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param d | 
|---|
|  |  |  | * @param day | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 将日期类型格式化成字符串 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param date | 
|---|
|  |  |  | * @return 格式化后日期字符串 | 
|---|
|  |  |  | * @throws ParseException | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 获取时间戳 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static String getTimeMark() { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return um; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 根据单位计算目标日期 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param num 距离 | 
|---|
|  |  |  | * @param unit 日期单位 Y/M/D | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Date calDate(Integer num, String unit) { | 
|---|
|  |  |  | Calendar calendar = Calendar.getInstance(); | 
|---|
|  |  |  | Date targetDate = null; | 
|---|
|  |  |  | switch (unit) { | 
|---|
|  |  |  | case "Y": | 
|---|
|  |  |  | calendar.add(Calendar.YEAR, num); | 
|---|
|  |  |  | targetDate = calendar.getTime(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "M": | 
|---|
|  |  |  | calendar.add(Calendar.MONTH, num); | 
|---|
|  |  |  | targetDate = calendar.getTime(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "D": | 
|---|
|  |  |  | calendar.add(Calendar.DAY_OF_MONTH, num); | 
|---|
|  |  |  | targetDate = calendar.getTime(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | targetDate = stringToDate("2099-12-31", DATE_FORMAT_DD); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return targetDate; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static String getAgeForBirthDay(Date birthDay) { | 
|---|
|  |  |  | Calendar cal = Calendar.getInstance(); | 
|---|
|  |  |  | if (birthDay == null) { | 
|---|
|  |  |  | return "-"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 出生日期晚于当前时间,无法计算 | 
|---|
|  |  |  | if (cal.before(birthDay)) { | 
|---|
|  |  |  | return "-"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 当前年份 | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); | 
|---|
|  |  |  | // 计算整岁数 | 
|---|
|  |  |  | Integer age = yearNow - yearBirth; | 
|---|
|  |  |  | if (monthNow <= monthBirth) { | 
|---|
|  |  |  | if (monthNow == monthBirth) { | 
|---|
|  |  |  | if (dayOfMonthNow < dayOfMonthBirth) { | 
|---|
|  |  |  | // 当前日期在生日之前,年龄减一 | 
|---|
|  |  |  | age--; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | age--; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return age.toString(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|