๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Java/Java์˜ ์ •์„

Chapter 10 - ๋‚ ์งœ์™€ ์‹œ๊ฐ„ & ํ˜•์‹ํ™”

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

  • ์ˆซ์ž๋ฅผ ํ˜•์‹ํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • ์‚ฌ์šฉ๋ฒ•
    1. ์›ํ•˜๋Š” ์ถœ๋ ฅ ํ˜•์‹์˜ ํŒจํ„ด์„ ์ž‘์„ฑ ํ›„ DecimalFormat ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    2. ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž์—ด๋กœ format ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ
  • parse() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ธฐํ˜ธ์™€ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ

2.2 SimpleDateFormat

  • SimpleDateFormat์œผ๋กœ ๋‚ ์งœ ๋ฐ์ดํ„ฐ(Date ๊ฐ์ฒด)๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋‹ค์–‘ํ•˜๊ฒŒ ์ถœ๋ ฅ
  • ์‚ฌ์šฉ๋ฒ•
    1. ์›ํ•˜๋Š” ์ถœ๋ ฅ ํ˜•์‹์˜ ํŒจํ„ด์„ ์ž‘์„ฑํ•˜์—ฌ SimpleDateFormat ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    2. ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” 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()๋ฅผ ์‚ฌ์šฉ
    • ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค์—๋Š” ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฑฐ์˜ ๋‹ค ํฌํ•จ