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));
        }
    }
}