Java 8 ์ด์๋๋ฉด์ Date, Time, Timestamp๋ฑ์ด ๋ ๊ฑฐ์๊ฐ ๋์ด๋ฒ๋ฆฌ๊ณ
๋ฌด์์์ ์ผ๋ก LocalDateTime, ZonedDateTime, LocalTime ๋ฑ์ Database Entity์์ ์ฌ์ฉํ๋๊ฒ์ ๋ง์ด ๋ด์์ต๋๋ค.
๊ทธ๋ฌ๋์ค Instant๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๊ฒฌํ๋ฉด์๋ถํฐ ์๊ตฌ์ฌ์ด ๋ค์์ต๋๋ค.
๋ ์ข์๊ฑฐ ๊ฐ์๋ฐ ์ ์ฌ๋๋ค์ด ์์ฐ๋๊ฑฐ์์ง? ํ๋ ์๊ฐ๋ถํฐ ํ๊ฒ๋๋ฉด์
์ด๋ ํ ํ์
์ ์ด๋๊ณณ์ ์ ์ ํ๊ฒ ์ฌ์ฉํ์ฌ์ผ ํ๋์ง ์กฐ์ฌํด๋ณธ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์ ํ๋ ค ํฌ์คํ
์ ๋จ๊น๋๋ค.
- Instant
- LocalDate, LocalTime, LocalDateTime
- OffsetDateTime
- ZonedDateTime
- JDBC์์ ๋ณ๊ฒฝ๋๋ ํํ
๋ง์ ์ฌ๋๋ค์ด longํ Unix Timestamp(POSIX Time, Epoch Time)์ ์ฐ๋ ์ด์ ๋ ๊ฐ๋จํฉ๋๋ค.
integer, long type์ ์ด์ฉํ ์ ๋ ฌ / ์ฐ์ฐ๋ฑ์์ ๋ค๋ฅธ ํ์
๋ค๋ณด๋ค๋ ๋น ๋ฅธ ์๋๋ฅผ ์๋ํฉ๋๋ค.
ํ์ง๋ง Unix Timestamp๋ Year 2038 problem์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ง๊ธ์ด๋ผ๋ ๋ค๋ฅธ ํ์
์ ์ฌ์ฉํ๋๊ฒ ์ข์ต๋๋ค.
๊ทธ๋์ ๋์จ๊ฒ์ด Java์ Instant์
๋๋ค.
Instant๋ ์๋ฐ 1.8 java.time package์ ๋ค์ด๊ฐ์์ผ๋ฉฐ UTC์ ํ์ ๋ผ์ธ์์๋ ์๊ฐ์ผ๋ก, 1970๋ 1์ 1์ผ UTC์ ์ฒซ ๋ฒ์งธ ์๊ฐ ์ดํ์ ํ์ฌ ์๊ฐ๊น์ง์ ๋๋ ธ์ด๋ฅผ ๋ํ๋ธ ๊ฐ ์ ๋๋ค. ๋ถ๋ถ์ ๋น์ฆ๋์ค ๋ก์ง, ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ UTC๋ก ์ด๋ฃจ์ด์ ธ์ผํ๋ฏ๋ก ์์ฃผ ์ฌ์ฉํ๊ธฐ์ ํธ๋ฆฌํ ํด๋์ค์ ๋๋ค.
Java Time์์ Local์ด ๋ค์ด๊ฐ๋ค๋๊ฒ์ ์๊ฐ๋(Zone Offset/Zone Region)์ ๋ํ ์ ๋ณด๊ฐ ์๋ค๋ ์๋ฏธ์
๋๋ค.
๋ณดํต ์ด๋ฐ๋ ์ ์ฌ์ฉํ๋๊ฒ์ ๊ทธ ๋ ์ด ์๋ฏธํ๋ ์ฆ, ์์ผ ์ด๋ ๊ธฐ๋
์ผ์ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
๋ค๋ฅธ๋๋ผ์์ ํ๋ ์ด๋ฒคํธ ์๊ฐ์ ๋ง์ถ๊ธฐ ์ํด์๋ ๋ฐ๋์ OffsetDateTime, ZonedDateTime์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
LocalDateTime + ZoneOffset์ ๊ฐ๋
์ผ๋ก
OffsetDateTime๋ UTC๋ณด๋ค ๋ช ์๊ฐ/๋ถ/์ด ์ ๋๋ ๋ค์ ์ปจํ
์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐ์ ๋ ์ง ๋ฐ ์๊ฐ์ผ๋ก ๋ํ๋
๋๋ค.
Offset์ ํฌ๊ธฐ(์๊ฐ/๋ถ/์ด)๋ ZoneOffset ํด๋์ค๋ก ํ์๋ฉ๋๋ค.
์๊ฐ/๋ถ/์ด๊ฐ 0์ด๋ฉด OffsetDateTime์ Instant ๋์ผํ UTC์ ์๊ฐ์ ๋ํ๋
๋๋ค.
OffsetDateTime + ZoneRegion์ ๋ํ ์ ๋ณด๊น์ง ํฌํจํ ๊ฐ์ฒด์
๋๋ค.
OffsetDateTime๊ณผ์ ์ฐจ์ด์ ์ DST(Daylight Saving Time)์ ๊ฐ์ Time Transition Rule์ ํฌํจํ๋ ZoneRegion์ ์ ๋ฌด์ฐจ์ด ์
๋๋ค.
DST์๋ CET(๊ฒจ์ธ), CEST(์ฌ๋ฆ) ํํ๊ฐ ์๋๋ฐ Time Zone(CET)๋ก ํต์ผํ๊ณ Time Transition Rule์ ๊ฐ์ง๋ ZoneRules๋ฅผ ํตํด ์์์ ๋ด๋ถ์ ์ผ๋ก ๊ณ์ฐํด์ค๋๋ค.
์ฐธ๊ณ https://stackoverflow.com/questions/32437550/whats-the-difference-between-instant-and-localdatetime https://perfectacle.github.io/2018/09/26/java8-date-time/





