java.time 패키지 | LocalDate, LocalTime, LocalDateTime
2024. 11. 19. 13:22ㆍ코딩테스트/Java
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.time.format.DateTimeFormatter;
1. 날짜와 시간 객체 생성
1) LocalDate [년-월-일]
LocalDate myDate = LocalDate.of(2021, 1, 1); //2021-01-01 (년, 월, 일)
LocalDate localDate = LocalDate.now(); //2021-09-16 (현재 날짜)
localDate.getYear(); //2021
localDate.getMonth(); //SEPTEMBER (열거값, 리턴타입: Month)
localDate.getMonthValue(); //9
localDate.getDayOfYear(); //259 (일년의 몇 번째 일)
localDate.getDayOfMonth(); //16 (월의 몇 번째 일)
localDate.getDayOfWeek(); //THURSDAY (리턴타입: DayOfWeek)
localDate.isLeapYear(); //false (윤년 여부)
2) LocalTime [시간:분:초.나노초]
LocalTime myTime = LocalTime.of(12, 10, 30); //12:10:30 (시간, 분, 초, 나노초)
LocalTime localTime = LocalTime.now(); //17:30:26.293112 (현재 시간)
localTime.getHour(); //17
localTime.getMinute(); //30
localTime.getSecond(); //26
localTime.getNano(); //293112
3) LocalDateTime [년-월-일T시간:분:초.나노초]
LocalDateTime myDateTime = LocalDateTime.of(2021,1,1,12,10,30); // 2021-01-01T12:10:30 (년, 월, 일, 시간, 분, 초, 나노초)
LocalDateTime localDateTime = LocalDateTime.now(); //2021-09-16T17:51:59.951920
2. 조작 메서드
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = LocalDateTime.now();
//날짜 더하거나 빼기
.plusYears(long) // 년도 더하기
.minusYears(long) // 년도 빼기
.plusMonths(long) // 월 더하기
.minusMonths(long) // 월 빼기
.plusDays(long) // 일 더하기
.minusDays(long) // 일 빼기
.plusWeeks(long) // 주 더하기
.minusWeeks(long); // 주 빼기
//날짜 변경
.withYear(int) // 년도를 변경
.withMonth(int) // 월 변경
.withDayOfMonth(int) // 월의 일을 변경
.withDayOfYear(int); // 년도의 일을 변경
.with(TemporalAdjuster adjuster) // 현재 날짜를 기준으로 상대적인 날짜로 변경
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
//시간 더하거나 빼기
.plusHours(long) // 시간 더하기
.minusHours(long) // 시간 빼기
.plusMinutes(long) // 분 더하기
.minusMinutes(long) // 분 빼기
.plusSeconds(long) // 초 더하기
.minusSeconds(long) // 초 빼기
.plusNanos(long) // 나노초 더하기
.minusNanos(long); // 나노초 빼기
//시간 변경
.withHour(int) // 시간 변경
.withMinute(int) // 분 변경
.withSecond(int) // 초 변경
.withNano(int); // 나노초 변경
3. 비교 메서드
LocalDate startDate = LocalDate.of(2016, 4, 2);
LocalDate endDate = LocalDate.of(2016, 5, 5);
// startDateTime이 endDateTime 보다 이전 날짜 인지 비교
startDateTime.isBefore(endDateTime); // true
// 동일 날짜인지 비교
startDateTime.isEqual(endDateTime); // false
// startDateTime이 endDateTime 보다 이후 날짜인지 비교
startDateTime.isAfter(endDateTime); // false
//사이 기간 계산
Period period = startDate.until(endDate);
period.getYears(); // 0년
period.getMonths(); // 1개월
period.getDays(); // 3일 차이
ChronoUnit.DAYS.between(startDate, endDate); // 결과 : 33 (1개월 3일)
LocalTime startTime = LocalTime.of(23, 52, 35);
LocalTime endTime = LocalTime.of(23, 59, 59);
// startTime이 endTime 보다 이전 시간 인지 비교
startTime.isBefore(endTime); // true
// startTime이 endTime 보다 이후 시간 인지 비교
startTime.isAfter(endTime); // false
//사이 시간 계산
Duration duration = Duration.between(startTime, endTime);
duration.getSeconds(); // 초의 차이
duration.getNano(); // 나노초의 차이
4. 날짜와 시간 <-> String 변환
LocalDateTime localDateTime = LocalDateTime.now();
//LocalDateTime->String
localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//String->LocalDateTime
localDateTime.parse("2021-09-16 17:51:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
활용 문제
import java.time.LocalDate;
//요일 구하는 문제
class Solution {
public String solution(int a, int b) {
LocalDate date = LocalDate.of(2016, a, b);
return date.getDayOfWeek().toString().substring(0,3);
}
}
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
//특정 시간으로부터 60초가 지났는지 확인하는 문제
class Solution {
public String solution(int n) {
String time = "10:10:00";
String time2 = "10:11:01";
LocalTime t1 = LocalTime.parse(time, DateTimeFormatter.ISO_LOCAL_TIME); //hh:MM:ss 형식
LocalTime t2 = LocalTime.parse(time2, DateTimeFormatter.ISO_LOCAL_TIME);
if(t2.isAfter(t1.plusSeconds(59))){ // t2가 t1 이후로 60초가 지난 시간인지 확인
//t1 이후로 60초가 지나서 sidecar가 발동된 시간을 String으로 변환해서 return
return lt1.plusSeconds(60).format(DateTimeFormatter.ISO_LOCAL_TIME));
}
}
}