Java代码实现给定的出生日期字符串,按北京时间的时区,判断是否未成年的工具方法

11 阅读1分钟

要实现一个工具方法,根据给定的出生日期字符串(假设格式为"yyyy-MM-dd")和北京时间的时区来判断是否未成年,可以先将字符串转换为LocalDate对象,然后再进行判断。 以下是完整的Java代码示例:

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class AgeChecker {

    public static boolean isMinor(String birthDateString) {
        // 定义日期格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        // 将字符串转换为LocalDate对象
        LocalDate birthDate = LocalDate.parse(birthDateString, formatter);

        // 获取当前北京时间的日期
        ZonedDateTime currentDateTimeBeijing = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
        LocalDate currentDateBeijing = currentDateTimeBeijing.toLocalDate();

        // 计算年龄
        long yearsBetween = ChronoUnit.YEARS.between(birthDate, currentDateBeijing);

        // 如果年龄小于18,那么就是未成年
        return yearsBetween < 18;
    }

    public static void main(String[] args) {
        String birthDateString = "2005-05-10"; // 示例出生日期字符串
        boolean isMinor = isMinor(birthDateString);
        System.out.println("Is the person born on " + birthDateString + " a minor in Beijing time? " + isMinor);
    }
}

在这个例子中,首先定义了一个DateTimeFormatter对象,用于将出生日期字符串转换为LocalDate对象。然后,使用ZonedDateTime.now(ZoneId.of("Asia/Shanghai"))获取当前北京时间的日期和时间,并提取出日期部分。计算出生日期和当前日期之间的年份差,如果这个差值小于18,就认为该人是未成年。