본문 바로가기
자바

생년월일로 나이 구하기

by 이시대최고개발자 2023. 5. 18.

Service

@Override
    public int insertEmp(EmpVO vo) {

        String birthday = vo.getTempRegno(); // 프론트에서 입력받은 생년월일
        String frontDigits = getFrontDigits(birthday);  // 주민등록번호 앞자리 (950101)
        String bir = birthday.replaceAll("[^\\w+]", "");    // 생년월일에서 '-' 제거

        vo.setEmpRegno1(Integer.valueOf(frontDigits));
        vo.setEmpAge(getAmericanAge(bir));
        encryptBoard(vo);
        return dao.insertEmp(vo);
    }

    private int getAmericanAge(String birthDate) {    // 생년월일로 나이 구하기
        LocalDate now = LocalDate.now();
        LocalDate parsedBirthDate = LocalDate.parse(birthDate, DateTimeFormatter.ofPattern("yyyyMMdd"));

        int americanAge = now.minusYears(parsedBirthDate.getYear()).getYear(); // (1)

        // (2)
        // 생일이 지났는지 여부를 판단하기 위해 (1)을 입력받은 생년월일의 연도에 더한다.
        // 연도가 같아짐으로 생년월일만 판단할 수 있다!
        if (parsedBirthDate.plusYears(americanAge).isAfter(now)) {
            americanAge = americanAge -1;
        }

        return americanAge;
    }
    private String getFrontDigits(String birthday) {  // 생년월일을 주민등록번호 앞자리로 바꿔주기
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = format.parse(birthday);

            int year = date.getYear() % 100; // 연도의 뒤 2자리
            int month = date.getMonth() + 1; // 월
            int day = date.getDate(); // 일

            String monthString = String.format("%02d", month); // 월을 2자리로 포맷팅
            String dayString = String.format("%02d", day); // 일을 2자리로 포맷팅

            return String.format("%02d%02d%02d", year, month, day);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

'자바' 카테고리의 다른 글

날짜 형식 변환 메소드  (0) 2023.08.24
Zxing 라이브러리 사용하기  (0) 2023.05.01

댓글