Chapter 10 - ๋ ์ง์ ์๊ฐ & ํ์ํ
1. ๋ ์ง์ ์๊ฐ
1.1 Calendar์ Date
- Date๋ JDK 1.0๋ถํฐ ์ ๊ณต
- Calendar๋ JDK 1.1๋ถํฐ ์ ๊ณต
- Calendar์ Date์ ๋จ์ ์ JDK 1.8์ java.time ํจํค์ง์์ ๊ฐ์ ํ ํด๋์ค ์ ๊ณต
Calendear์ GregorianCalendar
- Calendar๋ ์ถ์ ํด๋์ค
Calendar.getInstance()
๋ก ๊ตฌํ๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ป์ ์ ์์- ์ง์ ์์ฑ์๋ฅผ ์ฐ๊ธฐ๋ณด๋จ getInstance๋ฅผ ์ฌ์ฉ
- ํ๊ตญ์ ์ ์ธํ ๋๋จธ์ง ๊ตญ๊ฐ๋ GregorianCalendar
Date์ Calendar ๊ฐ์ ๋ณํ
- Calendar to Date
- Calendar cal = Calendar.getInstance();
- Date d = new Date(cal.getTimeInMillis());
- Date to Calendar
- Date d = new Date();
- Calendar cal = Calendar.getInstance();
- cal.setTime(d);
- Calendar ์ธ์คํด์ค์ get ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ๋๋ int ๊ฐ๋ค์ Calendar์ ์ ์๋ static ์์
- Calendar.MONTH์ ๋ฒ์๋ 0~11์์ ์ฃผ์
- Calendar ์ธ์คํด์ค์ ๋ ์ง์ ์๊ฐ์ ์ํ๋ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ค๋ฉด set ๋ฉ์๋ ์ฌ์ฉ
- ๋ ๋ ์ง ๊ฐ์ ์ฐจ์ด๋ ๋ ๋ ์ง๋ฅผ ์ด ๋จ์๋ก ๋ณ๊ฒฝ ํ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ฉด ๋จ
- getTimeInMillis()๋ 1/1000์ด ๋จ์๋ก ๊ฐ์ ๋ฐํ
- Calendar ์ธ์คํด์ค์ add()๋ฅผ ์ฌ์ฉํ๋ฉด ์ง์ ํ ํ๋์ ๊ฐ์ ์ํ๋ ๋งํผ ์ฆ๊ฐ๋ ๊ฐ์ ๊ฐ๋ฅ
- roll() ๋ฉ์๋๋ ๋ค๋ฅธ ์์ด๋ ์ผ ํ๋ ๋ฑ์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ์ฆ๊ฐ๋ ๊ฐ์
2. ํ์ํ ํด๋์ค
- java.text ํจํค์ง์ ํฌํจ
- ์ซ์, ๋ ์ง, ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํ์์ ๋ง๊ฒ ํํํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฒด์งํฅ์ผ๋ก ์ค๊ณ ํ ํ์คํํ ๊ฒ
- ํ์ํ ๋ฐ ์ญ์ผ๋ก ์๋์ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์๋ ์์
2.1 DecimalFormat
- ์ซ์๋ฅผ ํ์ํํ๋๋ฐ ์ฌ์ฉ
- ์ฌ์ฉ๋ฒ
- ์ํ๋ ์ถ๋ ฅ ํ์์ ํจํด์ ์์ฑ ํ DecimalFormat ์ธ์คํด์ค ์์ฑ
- ์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ฌธ์์ด๋ก format ๋ฉ์๋๋ฅผ ํธ์ถ
- parse() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ๊ธฐํธ์ ๋ฌธ์๊ฐ ํฌํจ๋ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํ ๊ฐ๋ฅ
2.2 SimpleDateFormat
- SimpleDateFormat์ผ๋ก ๋ ์ง ๋ฐ์ดํฐ(Date ๊ฐ์ฒด)๋ฅผ ์ํ๋ ํํ๋ก ๋ค์ํ๊ฒ ์ถ๋ ฅ
- ์ฌ์ฉ๋ฒ
- ์ํ๋ ์ถ๋ ฅ ํ์์ ํจํด์ ์์ฑํ์ฌ SimpleDateFormat ์ธ์คํด์ค ์์ฑ
- ์ถ๋ ฅํ๊ณ ์ ํ๋ Date ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๊ณ format(Date d)๋ฅผ ํธ์ถ
- Date ์ธ์คํด์ค๋ง format ๋ฉ์๋์ ์ฌ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ์ Calendar ์ธ์คํด์ค๋ Date ์ธ์คํด์ค๋ก ๋ณํ ํ ์ฌ์ฉ
- parse() ๋ฉ์๋๋ก ๋ ์ง ๋ฐ์ดํฐ์ ์ถ๋ ฅ ํ์์ ๋ณํ ๊ฐ๋ฅ
- ๋ฌธ์์ด source๋ฅผ ๋ ์ง source๋ก
2.3 ChiceFormat
- ํน์ ๋ฒ์์ ์ํ๋ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํ
- ์ฐ์์ ๋๋ ๋ถ์ฐ์์ ์ธ ๋ฒ์์ ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์
- ๊ฒฝ๊ณ๊ฐ์ ๋ฐ๋์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
- ์นํ๋ ๋ฌธ์์ด์ ๊ฐ์๋ ๊ฒฝ๊ณ๊ฐ์ ์ํด ์ ์๋ ๋ฒ์์ ๊ฐ์์ ์ผ์นํด์ผ ํจ
- ๊ทธ๋ ์ง ์์ ์ IllegalArgumentException ๋ฐ์
- ํจํด์ ๊ตฌ๋ถ์๋ก '#'์ '<'
- '#'๋ ๊ฒฝ๊ณ๊ฐ์ ๋ฒ์์ ํฌํจ
- '<'๋ ํฌํจ X
2.4 MessageFormat
- ๋ฐ์ดํฐ๋ฅผ ์ ํด์ง ์์์ ๋ง๊ฒ ์ถ๋ ฅํ ์ ์๋๋ก ๋์์ค
- parse()๋ฅผ ์ด์ฉํ๋ฉด ์ง์ ๋ ์์์์ ํ์ํ ๋ฐ์ดํฐ๋ง์ ์์ฝ๊ฒ ์ถ์ถ
- ์์ ๋ฌธ์์ด์ ์์ฑํ ๋ '{์ซ์}'๋ก ํ์๋ ๋ถ๋ถ์ด ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ๋ ์๋ฆฌ
- ์์์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ ๊ฐ์ฒด ๋ฐฐ์ด๋ก ์ง์
- Database์ ์ ์ฅํ Insert ๋ฌธ์ผ๋ก ๋ณํํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํจ
3. java.time ํจํค์ง
- Date์ Calendar๊ฐ ๊ฐ์ง๊ณ ์๋ ๋จ์ ๋ค์ ํด์ํ๊ธฐ ์ํด JDK1.8๋ถํฐ java.time ํจํค์ง ์ถ๊ฐ
- ์ด ํจํค์ง์ ์ํ ํด๋์ค๋ค์
๋ถ๋ณ(immutable)
3.1 java.time ํจํค์ง์ ํต์ฌ ํด๋์ค
- LocalDate(๋ ์ง) + LocalTime(์๊ฐ) -> LocalDateTime (๋ ์ง & ์๊ฐ)
- LocalDateTime + ์๊ฐ๋ -> ZonedDateTime
Period์ Duration
- ๋ ์ง - ๋ ์ง = Period
- ์๊ฐ - ์๊ฐ = Duration
๊ฐ์ฒด ์์ฑํ๊ธฐ - now(), of()
- now()๋ ํ์ฌ ๋ ์ง์ ์๊ฐ์ ์ ์ฅํ๋ ๊ฐ์ฒด ์์ฑ
- of()๋ ํด๋น ํ๋์ ๊ฐ์ ์์๋๋ก ์ง์ ํด ์ฃผ๋ฉด ๊ทธ์ ๋ง๋ ์๊ฐ์ ๊ฐ์ฒด ์์ฑ
Temporal๊ณผ TemporalAmount
- Temporal, TemporalAccessor, TemporalAdjuster๋ฅผ ๊ตฌํํ ํด๋์ค
- LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Instant ๋ฑ
- TemporalAmount๋ฅผ ๊ตฌํํ ํด๋์ค
- Period, Duration
TemporalUnit๊ณผ TemporalField
- TemporalUnit : ๋ ์ง์ ์๊ฐ์ ๋จ์๋ฅผ ์ ์ํด ๋์ ์ธํฐํ์ด์ค
- ๊ตฌํ์ฒด : ์ด๊ฑฐํ ChronoUnit
- TemporalField : ๋
, ์, ์ผ ๋ฑ ๋ ์ง์ ์๊ฐ์ ํ๋๋ฅผ ์ ์ํด ๋์ ๊ฒ
- ๊ตฌํ์ฒด : ์ด๊ฑฐํ ChronoField
- ๋ ์ง์ ์๊ฐ์์ ํน์ ํ๋์ ๊ฐ๋ง์ ์ป์ ๋๋ get(), ํน์ get์ผ๋ก ์์ํ๋ ์ด๋ฆ์ ๋ฉ์๋ ์ฌ์ฉ
- ํน์ ๋ ์ง์ ์๊ฐ์์ ์ ์ฅ๋ ๋จ์์ ๊ฐ์ ๋ํ๊ฑฐ๋ ๋บ ๋๋ plus() ๋๋ minus()์ ๊ฐ๊ณผ ํจ๊ป ์ด๊ฑฐํ ChronoUnit ์ฌ์ฉ
3.2 LocalDate์ LocalTime
- java.time ํจํค์ง์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํด๋์ค
- now(), of() static ๋ฉ์๋๋ก ์ธ์คํด์ค ์์ฑ
- now()๋ ํ์ฌ์ ๋ ์ง๋ ์๊ฐ
- of()๋ ์ง์ ๋ ๋ ์ง๋ ์๊ฐ
- parse()๋ก ๋ฌธ์์ด์ ๋ ์ง์ ์๊ฐ์ผ๋ก ๋ณํ๋ ๊ฐ๋ฅ
ํน์ ํ๋์ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ - get(), getXXX()
- ์ฃผ์์ฌํญ
- Calendar์ ๋ฌ๋ฆฌ ์์ ๋ฒ์๊ฐ 1~12
- ์์ผ์ ์์์ผ๋ถํฐ 1
- get(), getLong()์ผ๋ก ์ํ๋ ํ๋ ์ง์ ์ง์ or getXXX() ๋ฉ์๋๋ก ํน์ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ ๊ฐ๋ฅ
- get(), getLong()์ ๋งค๊ฐ๋ณ์๋ ChronoField์ ์ ์๋ ์์๋ค
- ์ฌ์ฉํ ์ ์๋ ํ๋๋ ํด๋์ค๋ง๋ค ๋ค๋ฆ
- chronoField.XXX.range()๋ก ํน์ ํ๋๊ฐ ๊ฐ์ง ์ ์๋ ๊ฐ์ ๋ฒ์ ์กฐํ ๊ฐ๋ฅ
ํ๋์ ๊ฐ ๋ณ๊ฒฝํ๊ธฐ - with(), plus(), minus()
- ๋ ์ง์ ์๊ฐ์์ ํน์ ํ๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๋ฏ with๋ก ์์ํ๋ ๋ฉ์๋ ์ฌ์ฉ
- ์ํ๋ ํ๋๋ฅผ ์ง์ ์ง์ ๊ฐ๋ฅ
- LocalDate, LocalTime์ ๋ถ๋ณ์ด๋ฏ๋ก ๋์ ์ฐ์ฐ์ ์ฌ์ฉํด์ ํ ๋นํ ๊ฒ
- ํน์ ํ๋์ ๊ฐ์ ๋ํ๊ฑฐ๋ ๋นผ๋ plus()์ minus()๋ ์กด์ฌ
- LocalTime์ truncatedTo()๋ ์ง์ ๋ ๊ฒ๋ณด๋ค ์์ ๋จ์์ ํ๋๋ฅผ 0์ผ๋ก ๋ง๋ฆ
- ๋ , ์, ์ผ์ 0์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ LocalDate๋ truncatedTo()๊ฐ ์์
๋ ์ง์ ์๊ฐ์ ๋น๊ต - isAfter(), isBefore(), isEqual()
- compareTo() ๋ณด๋ค ํธํ๊ฒ ๋น๊ตํ ์ ์๋ ๋ฉ์๋๋ค์ ์ ๊ณต
- isAfter(), isBefore(), isEqual()
- ์ฐํ๊ฐ ๋ค๋ฅธ ๋ ์ง๋ isEqual()๋ก ๋น๊ต
3.3 Instant
- Instant๋ ์ํฌํฌ ํ์๋ถํฐ ๊ฒฝ๊ณผ๋ ์๊ฐ์ ๋๋ ธ์ด ๋จ์๋ก ํํ
- now(), ofEpochSecond()๋ก ์์ฑ ๊ฐ๋ฅ
- now.getEpochSecond(), now.getNano() ๋ฉ์๋๋ก ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์
- ์๊ฐ์ ์ด ๋จ์์ ๋๋ ธ์ด ๋จ์๋ก ๋๋์ด ์ ์ฅ
Instant์ Date๊ฐ์ ๋ณํ
- Date๋ก ๋ณํ : from(Instant instant)
- Instant๋ก ๋ณํ : toInstant()
3.4 LocalDateTime๊ณผ ZonedDateTime
- LocalDate + LocalTime -> LocalDateTime
- LocalDateTime + ์๊ฐ๋ -> ZonedDateTime
LocalDate์ LocalTime์ผ๋ก LocalDateTime ๋ง๋ค๊ธฐ
- LocalDate์ LocalTime์ ํฉ์ณ์ ํ๋์ LocalDateTime์ ๋ง๋ค ์ ์์
- ๋ ์ง์ ์๊ฐ์ ์ง์ ์ ํ๋ of()๋ now()๋ฅผ ํตํด์๋ LocalDateTime ์์ฑ ๊ฐ๋ฅ
LocalDateTime์ ๋ณํ
- toLocalDate()์ผ๋ก LocalDate์ผ๋ก ๋ณํ ๊ฐ๋ฅ
- toLocalTime()์ผ๋ก LocalTime์ผ๋ก ๋ณํ ๊ฐ๋ฅ
LocalDateTime์ผ๋ก ZonedDateTime ๋ง๋ค๊ธฐ
- LocalDateTime์ ์๊ฐ๋๋ฅผ ์ถ๊ฐํด์ ๋ง๋ฆ
- ZoneId๋ฅผ ๋ฐ๋ฆ (์ผ๊ด ์ ์ฝ์๊ฐ์ ์๋์ผ๋ก ์ฒ๋ฆฌ)
- atZone()์ผ๋ก ์๊ฐ๋ ์ ๋ณด๋ฅผ ์ถ๊ฐ
ZoneOffset
- UTC๋ก๋ถํฐ ์ผ๋ง๋งํผ ๋จ์ด์ ธ ์๋์ง๋ฅผ ZoneOffset๋ก ํํ
- ์์ธ์ +9 (9์๊ฐ ๋น ๋ฆ)
OffsetDateTime
- ZoneId๊ฐ ์๋ ZoneOffset์ ์ฌ์ฉํ๋ ๊ฒ์ด OffsetDateTime
- ZoneOffset์ ๋จ์ง ์๊ฐ๋๋ฅผ ์๊ฐ์ ์ฐจ์ด๋ก๋ง ๊ตฌ๋ถ
ZonedDateTime์ ๋ณํ
- ZoneDateTime๋ ๋ ์ง์ ์๊ฐ์ ๊ด๋ จ๋ ๋ค๋ฅธ ํด๋์ค๋ก ๋ณํํ๋ ๋ฉ์๋๋ค์ ๊ฐ์ง๊ณ ์์
- ZonedDateTime์ GregorianCalendar๋ก ๋ฐ๊พธ๊ธฐ ์ํด์
from(ZonedDateTime)
๋ฉ์๋ ์ฌ์ฉ - GregorianCalendar์ ZonedDateTime๋ก ๋ฐ๊พธ๊ธฐ ์ํด์
toZonedDateTime()
๋ฉ์๋ ์ฌ์ฉ
3.5 TemporalAdjusters
- java.time ํจํค์ง์ ํด๋์ค๋ค์์ ์์ฃผ ์ฐ์ผ๋งํ ๋ ์ง ๊ณ์ฐ๋ค์ ๋์ ํด์ฃผ๋ ๋ฉ์๋๋ฅผ ์ ์ํด๋์ ๊ฒ์ด TemporalAdjusters ํด๋์ค
TemporalAdjusters ์ง์ ๊ตฌํํ๊ธฐ
- LocalDate์ with() ๋ฉ์๋๋ TemporalAdjusters ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์
- FunctionalInterface์ธ adjustInto()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ ๊ตฌํ
3.6 Period์ Duration
- ๋ ์ง - ๋ ์ง = Period
- ์๊ฐ - ์๊ฐ = Duration
between()
- ๋ ๋ ์ง์ ์๊ฐ์ ์ฐจ์ด๋ฅผ ๋ํ๋ด๋ period๋ฅผ ๊ตฌํ ์ ์์
- ์์ ํ๋ผ๋ฏธํฐ๊ฐ ๋ ์ง ์์ผ๋ก ์ด์ ์ด๋ฉด ์์, ๋ฐ๋๋ฉด ์์
between()๊ณผ until()
- ๊ฑฐ์ ๊ฐ์ ์ผ์ ํจ
- between()์ static ๋ฉ์๋, until์ ์ธ์คํด์ค ๋ฉ์๋๋ผ๋ ๊ฒ ์ฐจ์ด
of(), with()
- ofXXX() ๋ฑ์ ๋ฉ์๋ ์กด์ฌ
- with()๋ ํน์ ํ๋์ ๊ฐ์ ๋ณ๊ฒฝ
์ฌ์น์ฐ์ฐ, ๋น๊ต์ฐ์ฐ, ๊ธฐํ ๋ฉ์๋
- ๊ณฑ์
๊ณผ ๋๋์
์ ์ํ ๋ฉ์๋๋ ์กด์ฌ
- multipliedBy()
- dividedBy()
- ๋ถํธ ๊ด๋ จ ๋ฉ์๋๋ ์กด์ฌ
- ๋ฐ๋๋ก ๋ณ๊ฒฝ : negate()
- ๋ถํธ๋ฅผ ์์ฐ : abs()
- normalized() : ์์ ๊ฐ์ด 12๋ฅผ ๋์ง ์๊ฒ ๋ณ๊ฒฝํด ์ค
- ์ผ์ ๊ธธ์ด๋ ๊ทธ๋๋ก ๋๋ (์ผ์ ํ์ง ์๊ธฐ ๋๋ฌธ์)
๋ค๋ฅธ ๋จ์๋ก ๋ณํ -toTotalMonths(), toDays(), toHours(), toMinutes()
- Period์ Duration์ ๋ค๋ฅธ ๋จ์์ ๊ฐ์ผ๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉ
- get()์ ํน์ ํ๋์ ๊ฐ์ ๊ทธ๋๋ก ๊ฐ์ ธ์ด
- ํน์ ๋จ์๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ค๋ ์กด์ฌ
- LocalDate์ toEpochDay() ๋ฉ์๋๋ Epoch Day(1970.01.01)๋ถํฐ ๋ ์ง๋ฅผ ์ธ์ด ๋ฐํ
- Epoch Day ์ดํ์ ๋ ๋ ์ง ๊ฐ์ ์ผ์๋ฅผ ํธ๋ฆฌํ๊ฒ ๊ณ์ฐ
3.7 ํ์ฑ๊ณผ ํฌ๋งท
- ํ์ฑ : ๋ ์ง์ ์๊ฐ์ ์ํ๋ ํ์์ผ๋ก ์ถ๋ ฅ & ํด์
- ํ์ํ์ ๊ด๋ จ๋ ํด๋์ค๋ค์
java.time.format
ํจํค์ง- DateTimeFormatter๊ฐ ํต์ฌ
- ๋ค์ํ ํ์ ์ ๊ณต & ๊ทธ ์ธ์ ํ์์ ์ง์ ์ ์ํด์ ์ฌ์ฉ
- LocalDate๋ LocalTime ๊ฐ์ ํด๋์ค์๋ ์กด์ฌ format() ๋ฉ์๋ ์กด์ฌ
๋ก์ผ์ผ์ ์ข ์๋ ํ์ํ
ofLocalizedDate()
,ofLocalizedTime()
,ofLocalized DateTime()
์ ๋ก์ผ์ผ์ ์ข ์์ ์ธ ํฌ๋งทํฐ๋ฅผ ์์ฑ
์ถ๋ ฅ ํ์ ์ง์ ์ ์ํ๊ธฐ
- DateTimeFormatter์ ofPattern()์ผ๋ก ์ํ๋ ์ถ๋ ฅ ํ์์ ์ง์ ์์ฑํ ์๋ ์์
๋ฌธ์์ด์ ๋ ์ง์ ์๊ฐ์ผ๋ก ํ์ฑํ๊ธฐ
- ๋ฌธ์์ด์ ๋ ์ง ๋๋ ์๊ฐ์ผ๋ก ๋ณํํ๋ ค๋ฉด static ๋ฉ์๋์ธ parse()๋ฅผ ์ฌ์ฉ
- ๋ ์ง์ ์๊ฐ์ ํํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํด๋์ค์๋ ์ด ๋ฉ์๋๊ฐ ๊ฑฐ์ ๋ค ํฌํจ
'Java > Java์ ์ ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Chapter 12 - ์ ๋ค๋ฆญ์ค, ์ด๊ฑฐํ, ์ ๋ํ ์ด์ (0) | 2022.05.09 |
---|---|
Chapter 11 - ์ปฌ๋ ์ ํ๋ ์์ (0) | 2022.05.05 |
Chapter 09 - java.lang ํจํค์ง์ ์ ์ฉํ ํด๋์ค (0) | 2022.04.26 |
Chapter 08 - ์์ธ์ฒ๋ฆฌ (0) | 2022.04.24 |
Chapter 07 - ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ 2 (0) | 2022.04.22 |