DateUtil时间工具 2021-03-19 10:44 ```java package com.example.demo.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; /** * @author: HanXu * on 2021/3/19 * Class description: 时间工具 */ public class DateUtil { public static void main(String[] args) throws ParseException { String str = "1998-03-20"; System.out.println(getAge(str)); } /** * 1.1 获取当前年龄,eg:当前日期 2021-03-19 出生日期:1998-10-13 那么年龄为22岁;出生日期:1998-03-13 那么年龄为23岁(精确年龄) * @param birthdayStr 出生日期 年月日 * @return * @throws ParseException */ public static Integer getAge(String birthdayStr) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date birthday = format.parse(birthdayStr); return getAge(birthday); } /** * 1.2 获取当前年龄,同1.1 * @param birthday 出生日期 年月日 * @return */ public static Integer getAge(Date birthday) { Instant birthdayInstant = birthday.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTimeBirthday = LocalDateTime.ofInstant(birthdayInstant, zone); LocalDate birthdayLocalDate = localDateTimeBirthday.toLocalDate(); LocalDate now = LocalDate.now(); int ageNow = birthdayLocalDate.until(now).getYears(); return ageNow; } /** * 2.1 获取办理身份证时的年龄,计算年龄规则同1.1 * @param birthdayStr 出生日期 年月日 * @param valid_periodStartStr 身份证办理日期 年月日 * @return * @throws ParseException */ public static Integer getAgeWhenDoIDCard(String birthdayStr, String valid_periodStartStr) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date birthday = format.parse(birthdayStr); Date valid_periodStart = format.parse(valid_periodStartStr); return getAgeWhenDoIDCard(birthday, valid_periodStart); } /** * 2.2 获取办理身份证时的年龄,同2.1 * @param birthday 出生日期 年月日 * @param valid_periodStart 身份证办理日期 年月日 * @return */ public static Integer getAgeWhenDoIDCard(Date birthday, Date valid_periodStart) { Instant birthdayInstant = birthday.toInstant(); Instant validPeriodStartInstant = valid_periodStart.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTimeBirthday = LocalDateTime.ofInstant(birthdayInstant, zone); LocalDateTime localDateTimeStart = LocalDateTime.ofInstant(validPeriodStartInstant, zone); LocalDate birthdayLocalDate = localDateTimeBirthday.toLocalDate(); LocalDate validPeriodStartLocalDate = localDateTimeStart.toLocalDate(); // 获取办理身份证时的年龄 int ageWhenHandleIDCard = birthdayLocalDate.until(validPeriodStartLocalDate).getYears(); return ageWhenHandleIDCard; } /** * 3.1 获取大致年龄,eg:当前日期 2021-03-19 出生日期:1998-10-13 那么年龄为23岁(使用年份相减) * @param birthdayStr 出生日期 年月日 * @return */ public static Integer getAgeRoughly(String birthdayStr) { String nowTime = LocalDate.now().toString(); int age = Integer.parseInt(nowTime.substring(0, 4)) - Integer.parseInt(birthdayStr.substring(0, 4)); return age; } /** * 3.2 获取大致年龄,同3.1 * @param birthday 出生日期 年月日 * @return */ public static Integer getAgeRoughly(Date birthday) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String birthdayStr = format.format(birthday); System.out.println(birthdayStr); String nowTime = LocalDate.now().toString(); int age = Integer.parseInt(nowTime.substring(0, 4)) - Integer.parseInt(birthdayStr.substring(0, 4)); return age; } } ``` --END--
发表评论