호텔 예약하기 프로그램을 구현하면서 기능 중에 체크인, 체크아웃 날짜를 문자열로 입력받아 날짜를 계산하고 예약하는 부분이 있다. "20231201" 과 같은 형식의 문자열을 LocalDate
를 사용하여 날짜로 변환해 날짜 간 계산을 진행하였는데 오늘은 이 부분을 정리해보려 한다.
// 직접 지정하여 생성하기
val date = LocalDate.of(2023, 12, 1)
println(date) // 2023-12-01
// DateFormatter를 지정하여 String을 LocalDate로 만들기
// DateTimeFormatter.ISO_DATE 는 "yyyy-mm-dd"를 상수로 선언한 것이다.
// "yyyy-mm-dd" 형태의 String을 파싱할 수 있다.
val dateParse = LocalDate.parse("2023-12-01", DateTimeFormatter.ISO_DATE)
println(dateParse) // 2023-12-01
// 현재 날짜를 LocalDate로 생성하기
val now = LocalDate.now()
println(now) // 2023-12-01
val dateParse = LocalDate.parse("2023-12-01")
println(dateParse) // 2023-12-01
ofPattern
를 사용하여 포맷팅 형식을 정해줄 수 있다. ofPattern
의 인자로 포맷팅 형식을 넘겨주면 원하는 형식의 String으로 반환한다. val date = "2023/12/01"
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd")
val dateParse = LocalDate.parse(date, dateTimeFormatter)
println(dateParse) // 2023-12-01
val format = dateParse.format(dateTimeFormatter) // 2023/12/01
println(format)
val date = LocalDate.of(2023, 12, 1)
val newDate1 = date.withYear(2022)
println(newDate1) // 2022-12-01
val newDate2 = date.withMonth(4)
println(newDate2) // 2023-04-01
val newDate3 = date.withDayOfMonth(16)
println(newDate3) // 2023-12-16
val date = LocalDate.of(2023, 12, 1)
val plusDate1 = date.plusYears(1)
println(plusDate1) // 2024-12-01
val plusDate2 = date.plusMonths(1)
println(plusDate2) // 2024-01-01
val plusDate3 = date.plusDays(1)
println(plusDate3) // 2023-12-02
val minusDate1 = date.minusYears(1)
println(minusDate1) // 2022-12-01
val minusDate2 = date.minusMonths(1)
println(minusDate2) // 2023-11-01
val minusDate3 = date.minusDays(1)
println(minusDate3) // 2023-11-30