java.time 패키지(1)

2022. 1. 6. 14:10·자바/java.time 패키지

1. java.time 패키지

- 앞서 말했듯이 Date와 Calendar가 가지고 있는 단점을 해소하기 위해 나오게 되었다.

 

- java.time 패키지는 String처럼 불변이기 때문에, 날짜와 시간을 변경하는 메서드 내부에서는

새로운 객체를 생성한다.

 

- Calendar 클래스는 날짜와 시간을 하나로 표현하는 반면 이 패키지에서는 시간을 표현할 때는

LocalTime을 날짜를 표현할 때는 LocalDate를 표현한다. 

 

- 또한 날짜와 시간을 둘 다 필요하다면 LocalDateTime을 사용하고, 시간대(time-zone)까지 사용한다면

ZonedDateTime까지 사용해야 한다.

 

- Date 클래스와 유사한 클래스로는 Instant가 있는데, 초 단위로 표현한다.

 

- 또한 날짜와 시간을 초단위로 표현하는 값을 타임스탬프라고 부른다.

 

- Period 클래스는 두 날짜간의 차이를 표현하고, Duration 클래스는 시간의 차이를 표현하는 것이다.

 

 

 

- 객체 생성은 다음과 같다.

(1) LocalDate ld = LocalDate.now() 

(2) LocalDate ld = LocalDate.of(2022.01.06)

( LocalTime과  LocalDateTime, ZonedDateTime 또한 위와 동일하다. )

 

 

 

 

1-1. Temporal & TemporalAmount

- Temporal, TemporalAccessor, TemporalAdjuster 인터페이스를 구현한 클래스는 다음과 같다.

( LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Instant 등)

 

- TemporalAmount 인터페이스를 구현한 클래스는 다음과 같다.

( Period, Duration )

 

 

 

 

1-2. TemporalUnit & TemporalField

- 날짜와 시간 단위를 정의해 놓은 것이 TemporalUnit 인터페이스고 이것을 구현한 것이 열거형 ChronoUnit이다.

 

- 년, 월, 일 등 날짜와 시간의 필드를 정의해 놓은 것이 TemporalField 인터페이스고 이것을 구현한 것이 열거형

ChronoField이다.

 

- 이때 열거형의 뜻은 서로 관련된 상수를 묶어서 정의해 놓은 것을 말한다.

 

 

- 아래의 코드들을 보고 이해하자.

 

( 이렇게 보면 언제 ChronoField나 ChronoUnit을 써야할 지 헷갈릴 수 있는데, 이것을 지원하는 메서드가 있다. )

( boolean isSupported(TemporalUnit unit) or (ChronoField field) 가 있다. )

 

 

 

 

1-3. LocalDate & LocalTime

- 아래의 코드처럼 일 단위나 초 단위로도 생성자 초기화가 가능하다.

 

- 또한 아래의 코드처럼 parse() 함수를 이용해서도 생성자 초기화가 가능하다.

 

- Calendar 클래스와는 다르게 1~12월은 숫자 그대로 index 값을 사용하며, 요일은 1이 월요일부터 시작이다.

 

- 자세한 메서드는 자바의 정석 556p를 참고하자.

 

 

 

- 필드 값 변경하는 메서드는 다음과 같다.

(1) LocalDate with(TemporalField field, long newValue) - withYear, withMonth,

withDayOfMonth(int dayOfMonth)

: 값을 직접 저장할 수 있다.

: 주의할 점은 객체를 생성해서 다시 반환하기 때문에 대입 연사자가 없으면 안된다.

 

 

(2) LocalTime plus() or minus()

: with의 메서드와 유사하며, 더하거나 빼준다.

: 날짜와 시간의 비교 또한 가능한데, compareTo를 사용하면 된다.

: isAfter()와 isBefore(), isEqual()도 존재하는데, equals()가 존재하는데도 isEqual()이 있는 이유는 날짜만을

비교하기 위해 정의되었다.

( 예를 들어, 일본 날짜와 우리나라 날짜를 비교한다고 했을 떄, equals()는 false가 isEqual()은 true가 반환된다. )

 

 

 

 

1-4. LocalDateTime & ZonedDateTime

- LocaltDateTime을 생성하는 방법은 아래의 코드를 보고 이해하자.

 

 

 

- LocalDateTime에 시간대(time-zone)을 추가하면, ZonedDateTime이 되며, 여기서는 ZoneId라는

클래스를 사용한다.

 

 

 

- 만약 뉴욕이나 외국에 있는 시간을 불러오고 싶다면 아래의 코드처럼 하면 된다.

 

 

 

 

1-5. OffsetDateTime

- 1-4에서 했던 ZonedDateTime은 ZoneId를 사용하는데 일광절약시간처럼 시간대와 관련된 규칙이 포함되어 있다.

그러나 OffsetDateTime은 그것 대신에 ZoneOffset을 사용한다.

 

- 서로 다른 시간대에 존재하는 컴퓨터간의 통신에는 OffsetDateTime을 사용한다.

 

 

 

- 아래의 코드를 보고 이해하자.

( ZoneOffset은 UTC로부터 얼마만큼 떨어져 있는지를 표현한다. )

 

'자바 > java.time 패키지' 카테고리의 다른 글

java.time 패키지(3) - 파싱과 포맷  (0) 2022.01.09
java.time 패키지(2) - TemporalAdjusters와 Period & Duration  (0) 2022.01.07
'자바/java.time 패키지' 카테고리의 다른 글
  • java.time 패키지(3) - 파싱과 포맷
  • java.time 패키지(2) - TemporalAdjusters와 Period & Duration
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      map()
      코딩트리조별과제
      안정 정렬
      Collections Framework
      코드트리
      java.lang패키지
      문자 기반 스트림
      TCP 소켓 프로그래밍
      다형성
      InputStream
      Arrays
      snail
      코딩테스트
      알고스팟
      스트림
      file
      람다식
      제자리 정렬
      자바 개념
      java.time 패키지
      중간연산
      선택 정렬
      역직렬화
      ServerSocket
      outputstream
      유용한 클래스
      serializable
      안드로이드 스튜디오
      소켓 프로그래밍
      불안정 정렬
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    java.time 패키지(1)
    상단으로

    티스토리툴바