Java/[인프런 김영한 실전 자바 - 중급편]
[인프런 김영한 실전 자바 - 중급편] 날짜와 시간
h2boom
2024. 7. 21. 16:56
날짜와 시간
- 자바에서 제공하는 날짜 / 시간 라이브러리와 형태다.
- Local(현지, 특정 지역)이 앞에 붙는 이유는 세계 시간대를 고려하지 않아 타임존이 적영되지 않기 때문이다.
- 특정 지역의 날짜, 시간만 고려할 때 사용한다.
- 국내 서비스를 제공할 때 주로 사용하는 날짜, 시간 관련 클래스
- LocalDate : 날짜만 표현할 때 사용한다. (ex 2024-07-21)
- LocalTime : 시간만 표현할때 사용한다. (ex 10:07:13.123)
- LocalDateTime : LocalDate, LocalTime을 합한 개념이다. (ex 2024-07-21T10:07:13.123)
- ZonedDateTime : 시간대를 고려한 날짜와 시간을 표현할 때 사용하며 타임존이 포함된다.
(ex 2013-11-21T08:20:30.213+9:00[Asia/Seoul]- +9:00는 UTC로 부터의 시간대 차이 (오프셋)
- Asia/Seoul 은 타임존(오프셋 + 일광 절약 시간제 = 섬머타임)을 의미한다.
- 국제적으로, 타임존을 고려해야 할 때 사용하는 클래스
- OffsetDateTime : 타임존을 고려하지 못하고 UTC로 부터의 고정된 오프셋만 고려할 때 유용하다.
- Local(현지, 특정 지역)이 앞에 붙는 이유는 세계 시간대를 고려하지 않아 타임존이 적영되지 않기 때문이다.
- Year, Month, YearMonth, MonthDay
- 년, 월, 년월, 달일을 다룰 때 사용한다.
- Instant
- UTC를 기준으로하는 시간의 한 지점을 나타낸다.
- Period, Duration
- 시간의 간격(기간)을 표현하는데 사용된다.
- Period는 두 날짜의 간격을 년, 월, 일 단위로 나타내고 Duration은 시, 분, 초 단위로 나타낸다.
LocalDate / LocalTime / LocalDateTime
- 날짜 생성
- now() : 현재 시간을 기준으로 생성한다.
- of(...) : 특정 날짜와 시간을 기준으로 생성한다.
- 분리
- LocalDateTime은 LocalDate / LocalTime으로 toXxx()메소드로 분리할 수 있다.
- 합체
- LocalDateTime.of(localDate,localTime)을 사용해 LocalDate와 LocalTime을 사용해 LocalDateTime을 만들수 있다.
- 계산
- plusXxx() : 특정 날짜와 시간을 더할 수 있다.
- 비교
- isBefore() : 다른 날짜와 시간을 비교해 현 객체의 시간이 비교하는 대상보다 이전이라면 true
- isAfter() : 다른 날짜와 시간을 비교해 현 객체의 시간이 비교하는 대상보다 이후라면 true
- isEqual() : 다른 날짜와 시간을 비교해 같으면 true
- isEqual() vs equals()
- isEqual()은 비교 대상이 시간적으로만 같다면 객체와 타임존이 다르더라도 true
ex) 서울 9시와 UTC 0시를 비교할 경우 시간으로 동일하므로 true - equals()는 객체 타입, 타임 존 등등 모든 내부 데이터의 구성요소가 같아야 true
ex) 서울 9시와 UTC 0시 비교 시 타임존 데이터가 다르므로 false
- isEqual()은 비교 대상이 시간적으로만 같다면 객체와 타임존이 다르더라도 true
Instant
- UTC 1970년 1월 1일 0초 기준 이후로 경과한 전체 초의 수를 나타낸다.
- Instant의 장점
- UTC를 기준으로 하므로 시간대에 영향을 받지 않는다.
- 1970년 1월 1일 UTC(Epoch 시간)로 고정된 기준점을 가지고 있다.
- Instant의 단점
- 사용자 친화적이지 않다.
- 시간대 정보의 부재로 특정 지역의 날짜, 시간을 변환하려면 추가적인 작업이 필요하다.
- Instant는 전 세계적인 시간 기준 필요 시, 시간대 변환 없이 시간 계산 필요 시 사용한다.
- DB에 날짜, 시간 정보를 저장하거나 다른 시스템과 정보를 교환할 때 모든 시스템에서 동일한 기준점을 사용하게 되므로 데이터 일관성을 유지하기에 좋다.
Epoch 시간 : 컴퓨터 시스템에서 시간을 나타내는 방법 중 하나.
1970년 1월 1일 00:00:00 UTC부터 현재까지 경과된 시간을 초 단위로 표현한 것이다.
날짜 / 시간의 핵심 인터페이스
- 날짜와 시간은 특정 시점의 시간과 기간으로 나눌 수 있다.
- 시간 = 몇월 몇일, 몇시 몇분 ...
- 기간 = 몇년, 몇개월, 몇일, 몇시간 ...
- 특정 시점의 시간과 관련된 인터페이스는 Temporal
- LocalDateTime, LocalDate, LocalTime, ZonedDateTime, OffsetDateTime, Instant 등이 있다.
- Temporal은 날짜, 시간을 조작하기 위한 기능을 제공하는 인터페이스
- TemporalAccessor는 날짜, 시간을 읽기 위한 최소한의 기능만 제공하는 인터페이스
- 기간과 관련된 인터페이스는 TemporalAmount
- Period, Duration이 있다.
- TemporalAmount는 기간을 나타내며 일정 기간을 조정하는 기능을 제공한다.
- TemporalAccessor.get(), Temporal.plus()와 같은 인터페이스를 통해 특정 구현 클래스와 무관하게 일관성있는 시간 조회, 조작 기능을 제공한다.
- Temporal with() 는 날짜, 시간의 특정 필드의 값만 변경할 수 있다.
- 불변이기 때문에 리턴 값을 받아서 사용해야한다.
- TemporalAdjusters는 다음주 금요일, 이번 달의 마지막 일요일같은 복잡한 날짜를 계산할 때 유용하다.
- DayOfWeek은 요일을 나타내는 열거형이다.
formatting : 날짜와 시간 데이터를 원하는 포맷의 문자열로 변경하는 것, Date -> String
parsing : 문자열을 날짜와 시간 데이터로 변경하는 것, String -> Date
출처: [인프런 김영한 실전 자바 - 중급편]
김영한의 실전 자바 - 중급 1편 강의 | 김영한 - 인프런
김영한 | 실무에 필요한 자바의 다양한 중급 기능을 예제 코드로 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을
www.inflearn.com