새로운 날짜 시간 API

김진욱·2022년 11월 12일
0

java

목록 보기
11/13

LocalDate, LocalTime, Instant, Duration, Period

LocalDate

  • 시간을 제외한 날짜 정보만 가지고 있는 클래스이다.
  • 정적 팩토리 메서드 of로 LocalDate 인스턴스를 만들 수 있다.

LocalTime

  • 날짜를 제외한 시간 정보만 가지고 있는 클래스이다.
  • 정적 팩토리 메서드 of로 LocalTime 인스턴스를 만들 수 있다.

LocalDateTime

  • LocalDate와 LocalTime을 전부 가지고 있는 클래스이다.
  • 정적 팩토리 메서드 of로 LocalDateTime 인스턴스를 만들 수 있다.
  • 정적 팩토리 메서드 of를 만들 때 LocalDate와 LocalTime을 인수로 받을 수 있다.

Instant

  • 유닉스 에포크 시간(1970년 1월 1일 0시 0분 0초 UTC)을 기준으로 특정 지점까지의 시간을 로 표현한다.
  • LocalDateTime은 TimeZone을 포함하고 있지 않기 때문에 TimeZone을 가지고 있는 ZoneDateTime으로 표현하기 위해서는 Instant로 변환해야 하는 작업이 필요하다.

Duration

  • Duration은 두 시간 객체 사이의 간격을 알 수 있는 클래스이다.

Period

  • Period는 두 날짜 객체 사이의 간격을 알 수 있는 클래스이다.

TemporalAdjusters

  • TemporalAdjusters가 제공하는 정적 팩토리 메서드를 활용하면 날짜 조정기능을 쉽게 사용할 수 있다.
메서드설명
dayOfWeekInMonth요일에 해당하는 날짜를 반환함(음수를 사용하면 월의 끝에서 거꾸로 계산
firstDayOfMonth현재 달의 첫 번째 날짜를 반환함
firstDayOfNextMonth다음 달의 첫 번째 날짜를 반환함
firstDayOfNextYear내년의 첫 번째 날짜를 반환함
firstDdayOfYear올해의 첫 번째 날짜를 반환함
firstInMonth현재 달의 첫 번째 날짜를 반환함
lastDayOfMonth이번 달의 마지막 날짜를 반환함
lastDayOfNextMonth다음 달의 마지막 날짜를 반환함
lastDayOfNextYear내년의 마지막 날짜를 반환함
lastDayOfYear올해의 마지막 날짜를 반환함
lastInMonth이번달의 마지막 날짜를 반환함
next현재 달에서 현재 날짜 이후로 지정한 요일이 처음으로 나타나는 날짜를 반환함
previous현재 달에서 현재 날짜 이전에 지정한 요일이 처음으로 나타나는 날짜를 반환함
nextOrSame현재 날짜 이후 지정한 요일이 처음으로 나타나는 날짜를 반환함
previousOrSame현재 날짜 이전에 지정한 요일이 처음으로 나타나는 날짜를 반환함

평일을 NextWorkingDay를 구하는 로직

public class NextWorkingDay implements TemporalAdjuster {
	@Override
    public Temporal adjustInto(Temporal temporal) {
    	DayOfWeek dow = 
        			DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
		int dayToAdd = 1; // 평일의 경우 1일 추가
        if (dow == DayOfWeek.FRIDAY) dayToAdd = 3; // 금요일의 경우 3일을 추가해야 월요일이 된다.
        else if (dow == DayOfWeek.SATURDAY) dayToAdd = 2; // 토요일의 경우 2일을 더해야 월요일이 된다.
        retun temporal.plus(dayToAdd, ChronoUnit.DAYS);
    }
}

-> 현재 요일이 금요일일 경우 3일을 이동, 토요일일 경우 2일을 이동 해야 평일이 된다.

람다표현식을 통해 다음과 같이 표현할 수 있다.

date = date.with(temporal -> {
	DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
    int dayToAdd = 1;
    if(dow == DayOfWeek.FRIDAY) dayToAdd = 3;
    else if (dow == DayOfWeek.SATURDAY) dayToAdd = 2;
    return temporal.plus(dayToAdd, ChronoUNit.DAYS);
});

ZoneDateTime

  • TimeZone을 활용할 수 있는 날짜와 시간을 가지고 있는 클래스이다.
  • ZoneId의 정적 팩토리 메서드인 of를 가지고 특정 Zone의 시간 대를 알 수 있다.

0개의 댓글

관련 채용 정보