java

실습) 생일까지 남은 일수를 계산하는 프로그램

dalc3154 2025. 3. 5. 17:47
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;

public class Practice {
	public static void main(String[] args) {
		// 생일까지 남은 일수를 계산하는 프로그램
		// 사용자로부터 생년월일을 입력받고, 다가오는 생일까지 남은 일수를 반환
		
		Scanner sc = new Scanner(System.in);
		
		// 사용자로부터 생년월일 입력받기(형식 YYYY-MM-DD)
		System.out.println("생년월일을 입력하세요 (형식 YYYY-MM-DD)");
		String inputDate = sc.nextLine();
		
		// 입력받은 문자열을 LocalDate 타입으로 변환(formatter)
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		// .ofPattern()에서 쓰이는 형식 키워드는 월(M), 시(H)외에는 모두 소문자(분(m))
		
		// LocalDate.parse(a, b): a를 b의 형태로 재구성/
		// parse : 분석하다
		LocalDate birthDate = LocalDate.parse(inputDate, formatter);
		
		// 현재날짜구하기
		LocalDate today = LocalDate.now();
		
		// 올해의 생일 계산
		// .withYear(): 년도를 조작하는 메소드
		LocalDate nextBirthday = birthDate.withYear(today.getYear());
		
		// 1995.06.13 >> 2025.06.13
		// 1991.02.01 >> 2025.02.01
		
		// 생일이 이미 지났다면 년도값을 내년으로 설정
		if (nextBirthday.isBefore(today) || nextBirthday.isEqual(today)) {
			nextBirthday = nextBirthday.plusYears(1);
		}
		
		// 남은 일수 계산
		// ChoronoUnit.DAYS: java.time 패키지에서 날짜와 시간 간의 차이를 계산할 때 사용
		// .between(a, b): a와 b 사이의 날짜|시간 차이를 반환
		long daysUtilNextBirthday = ChronoUnit.DAYS.between(today, nextBirthday);
		System.out.println("남은 생일까지 " + daysUtilNextBirthday + "일 남았습니다");
	}
}

'java' 카테고리의 다른 글

37. 컬렉션 프레임워크-List  (0) 2025.03.06
36. 컬렉션 프레임워크  (0) 2025.03.06
35. API-java.util  (0) 2025.03.05
34. API-java.time  (0) 2025.03.05
33. API-java.lang  (0) 2025.03.05