[Java] java.time 패키지

Yujeong·2024년 5월 31일
0

Java

목록 보기
12/22
post-thumbnail

날짜와 시간 라이브러리가 필요한 이유

1. 날짜와 시간 차이 계산

윤년, 각 달의 일수 등을 계산해야하기 때문에 간단한 덧셈, 뺄셈 연산으로는 정확한 결과를 얻기 어렵다.

2. 윤년 계산

그레고리력은 1년이 보통 365일로 설정되어 있기 때문에 지구가 태양을 한 바퀴 도는데 걸리는 시간과 정확히 맞지 않다. 이를 해결하기 위해 4년마다 하루(2월 29일)을 추가하는 윤년(leap year)을 사용한다.

3. 일광 절약 시간(Daylight Saving Time, DST) 변환

보통 3월에서 10월은 태양이 일찍 뜨고, 나머지는 태양이 상대적으로 늦게 뜬다. 일광 절약 시간제(썸머타임)는 여기에 맞춰 시간을 1시간 앞당기거나 늦추는 제도이다. 1시간 오차가 발생할 수 있기 때문에 정확히 계산하기 어렵다.

4. 타임존 계산

세계는 다양한 타임존으로 나뉘어 있고, 각 타임존은 UTC로부터의 시간 차이로 정의된다. 타임존 간의 날짜와 시간 차이를 정확히 계산하기 어렵다.

타임존 목록

타임존시간차
Europe/London+00:00
GMT+00:00
UTC+00:00
US/Arizona-07:00
America/New_York-05:00
Asia/Seoul+09:00
Asia/Dubai+04:00
Asia/Istanbul+03:00
Asia/Shanghai+08:00
Europe/Paris+01:00
Europe/Berlin+01:00
  • GMT(Greenwich Mean Time, 그리니치 평균시)
    처음 세계 시간을 만들 때, 영국 런던에 있는 그리니치 천문대를 기준으로 했다. 그래서 태양이 그리니치 천문대를 통과할 때가 정오이다.
  • UTC(Universal Time Coordinated, 협정 세계시)
    UTC가 나중에 GMT를 대체하기 위해 도입되었다. 영국의 그리니치 천문대를 기준으로 한다.
    GMT와 차이는 시간을 정의하고 유지하는 방법이다. UTC는 지구의 자전 속도가 변화하는 것을 고려한 것으로 보다 정확한 시간을 유지한다.

자바 날짜와 시간 라이브러리의 역사

버전라이브러리/패키지설명
JDK1.0java.util.Date타임존 제대로 처리 불가
날짜 연산과 시간 연산 처리 어려움
버그 다수
JDK1.1java.util.Calendar타임존 지원
JDK8(1.8)java.timeJoda-Time 외부라이브러리를 표준 API로 도입

대표적인 클래스

  1. LocalDate, LocalTime, LocalDateTime
    [Java] LocalDate, LocalTime, LocalDateTime 클래스
    • LocalDate: 날짜 표현. 년, 월, 일
    • LocalTime: 시간 표현. 시, 분, 초
    • LocalDateTime: 날짜와 시간 표현. 년, 월, 일, 시, 분, 초
  2. ZoneId, ZoneOffset, ZonedDateTime, OffsetDateTime
    [Java] ZonedDateTime, OffsetDateTime , ZoneId, ZoneOffset 클래스
    • ZoneId: 시간대 ID. 특정 지역의 시간대를 나타내는 문자열을 사용하여 식별. 일광 절약 시간, UTC와 오프셋 정보를 포함
    • ZoneOffset: UTC와의 시간 차이(고정된 시간 차이)
    • ZonedDateTime: 시간대를 고려한 날짜와 시간 표현. 년, 월, 일, 시, 분, 초, 시간대 차이(UTC 기준), 타임존
    • OffsetDateTime: 시간대를 고려한 날짜와 시간 표현. 년, 월, 일, 시, 분, 초, 시간대 차이(UTC 기준)
  3. Year, Month, YearMonth, MonthDay
  4. Instant
    [Java] Instant 클래스
    - 특정 시점의 타임스탬프를 나노초 단위로 표현. 타임존 정보 포함하지 않음
  5. Period, Duration
    [Java] Period, Duration 클래스
    - Period: 두 날짜 간의 차이. 년, 월, 일
    - Duration: 두 시간 간의 차이. 시, 분, 초, 나노초

참고
Greenwich Mean Time
Coordinated Universal Time
Package java.time
Java의 정석
김영한의 실전 자바 - 중급 1편

profile
공부 기록

0개의 댓글

관련 채용 정보