๐Ÿ“•JAVA

[JAVA] ๋‚ ์งœ์™€ ์‹œ๊ฐ„

๋น™๋””์šฉ 2024. 4. 28.

1. ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

1) ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ฐจ์ด ๊ณ„์‚ฐ

- ํŠน์ • ๋‚ ์งœ์—์„œ ๋‹ค๋ฅธ ๋‚ ์งœ๊นŒ์ง€์˜ ์ •ํ™•ํ•œ ์ผ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๊ฑด ๋ณต์žกํ•˜๋‹ค (์œค๋…„, ์ผ์ˆ˜ ๋“ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœ ๋ง์…ˆ, ๋บ„์…ˆ ์—ฐ์‚ฐ์œผ๋กœ๋Š” ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ ์–ป๊ธฐ ํ•จ๋“ค๋‹ค)

- ์œค๋…„ ์ด์™ธ์—๋„ ์ผ๊ด‘ ์ ˆ์–‘ ์‹œ๊ฐ„ ๋ณ€ํ™˜, ํƒ€์ž„์กด ๊ณ„์‚ฐ ๋“ฑ ๋ณต์žกํ•œ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•œ ํ•ญ๋ชฉ์ด ๋งŽ๋‹ค.

- ์ด๋Ÿฌํ•œ ๊ณ„์‚ฐ์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์ž๋ฐ” ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—ญ์‚ฌ

1) JDK 1.0 (java.util.Date)

* ๋ฌธ์ œ์ 

- ํƒ€์ž„์กด ์ฒ˜๋ฆฌ ๋ถ€์กฑ

- ๋ถˆํŽธํ•œ ๋‚ ์งœ ์‹œ๊ฐ„ ์—ฐ์‚ฐ

- ๋ถˆ๋ณ€ ๊ฐ์ฒด ๋ถ€์žฌ

2) JAVA 1.1 (java.util.Calendar)

* ๋ฌธ์ œ์ 

- ์‚ฌ์šฉ์„ฑ ์ €ํ•˜

- ์„ฑ๋Šฅ ๋ฌธ์ œ

- ๋ถˆ๋ณ€ ๊ฐ์ฒด ๋ถ€์žฌ

3) JDK 1.8 (java.time ํŒจํ‚ค์ง€)

- ์ด์ „์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ํฌ๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ๋‹ค.

- ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ถˆ๋ณ€ ๊ฐ์ฒด ์„ค๊ณ„๋กœ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ, ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ ๋ณด์žฅ, ๋ณด๋‹ค ์ง๊ด€์ ์ธ API ์ œ๊ณต์œผ๋กœ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์—ฐ์‚ฐ์„ ๋‹จ์ˆœํ™” ํ–ˆ๋‹ค.

- LocalDate, LocalTime, LocalDateTime, ZoneDateTime, Instant ๋“ฑ์˜ ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•œ๋‹ค.

3. ์ž๋ฐ” ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ

- ์ž๋ฐ” ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์•„๋ž˜ ํ‘œ ํ•˜๋‚˜๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์ฐธ๊ณ  : https://docs.oracle.com/javase/tutorial/datetime/iso/overview.html

- * : ์ดˆ๋Š” ๋‚˜๋…ธ์ดˆ ์ดˆ ๋‹จ์œ„์˜ ์ •๋ฐ€๋„๋กœ ์บก์ณ๋œ๋‹ค.

- ** : ์ด ํด๋ž˜์Šค๋Š” ์ด ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๋‹จ์œ„๋กœ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.

- *** : zoneDateTime์— Period๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์„œ๋จธํƒ€์ž„ ๋˜๋Š” ๊ธฐํƒ€ ํ˜„์ง€ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ์ค€์ˆ˜ํ•œ๋‹ค.

1) LocalDate, LocalTime, LocalDateTime

- LocalDate : ๋‚ ์งœ๋งŒ์„ ํ‘œํ˜„

- LocalTime : ์‹œ๊ฐ„๋งŒ์„ ํ‘œํ˜„

- LocalDateTime : ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ‘œํ˜„ (LocalDate + LocalTime ๊ฐœ๋…)

 

- Local์ด ๋ถ™๋Š” ์ด์œ ๋Š” ์„ธ๊ณ„ ์‹œ๊ฐ„๋Œ€๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„ ํƒ€์ž„์กด์ด ์ ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (ํŠน์ • ์ง€์—ญ์˜ ๋‚ ์งœ์™€ ์‹œ๊ฐ„๋งŒ์„ ๊ณ ๋ ค)

2) ZonedDateTime, OffsetDateTime

- ZonedDateTime : ์‹œ๊ฐ„๋Œ€๋ฅผ ๊ณ ๋ คํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ (์‹œ๊ฐ„๋Œ€๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํƒ€์ž„์กด์ด ํฌํ•จ๋จ)

- OffsetDateTime : ์‹œ๊ฐ„๋Œ€๋ฅผ ๊ณ ๋ คํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ (ํƒ€์ž„์กด์ด ์—†๊ณ , UTC๋กœ ๋ถ€ํ„ฐ ์‹œ๊ฐ„๋Œ€ ์ฐจ์ด๋งŒ ๋ณด์—ฌ์คŒ)

3) Instant

- UTC๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ์‹œ๊ฐ„์˜ ํ•œ ์ง€์ ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. (1970๋…„ 1์›” 1์ผ 0์‹œ 0๋ถ„ 0์ดˆ(UTC)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„์œผ๋กœ ๊ณ„์‚ฐ)

- Instant ๋‚ด๋ถ€์—๋Š” ์ดˆ ๋ฐ์ดํ„ฐ๋งŒ ๋“ค์–ด์žˆ๋‹ค.(๋‚˜๋…ธ์ดˆ ํฌํ•จ)

4) Period, Duration

* ์‹œ๊ฐ„์˜ ๊ฐœ๋…์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ํ‘œํ˜„๋œ๋‹ค.

- ํŠน์ • ์‹œ์ ์˜ ์‹œ๊ฐ„(์‹œ๊ฐ)

- ์‹œ๊ฐ„์˜ ๊ฐ„๊ฒฉ(๊ธฐ๊ฐ„)

- Perion, Duration์€ ์‹œ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

- Period : ๋‘ ๋‚ ์งœ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ๋…„, ์›”, ์ผ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

- Duration : ๋‘ ์‹œ๊ฐ„ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์‹œ, ๋ถ„, ์ดˆ(๋‚˜๋…ธ์ดˆ) ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

3. ๊ธฐ๋ณธ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ - LocalDateTime

- ๋ชจ๋“  ๋‚ ์งœ ํด๋ž˜์Šค๋Š” ๋ถˆ๋ณ€์ด๋ฏ€๋กœ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜๊ฐ’์„ ๊ผญ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

1) LocalDateTime

- LocalDateTime์€ LocalDate์™€ LocalTime์„ ๋‚ด๋ถ€์— ๊ฐ€์ง€๊ณ  ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ชจ๋‘ ํ‘œํ˜„ํ•œ๋‹ค.

//LocalDateTime ํด๋ž˜์Šค ๊ตฌ์กฐ
public class LocalDateTime {

    private final LocalDate date;
    private final LocalTime time;
    ...

}

- now() : ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ƒ์„ฑ

- of(...) : ํŠน์ • ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ƒ์„ฑ ( ๋…„, ์›”, ์ผ ์ž…๋ ฅ๊ฐ€๋Šฅ)

- ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ toLocalDate(), toLocalTime() ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ

- LocalDateTime.of(localDate, localTime) ์œผ๋กœ ํ•ฉ์ณ์„œ LocalDatetime์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

- PlusXxx() : ํŠน์ • ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„์„ ๋”ํ•œ๋‹ค.

- isBefore() / isAfter() : ๋‹ค๋ฅธ ๋‚ ์งœ์‹œ๊ฐ„๊ณผ ๋น„๊ต

- isEquals() : ๋‹ค๋ฅธ ๋‚ ์งœ์‹œ๊ฐ„๊ณผ ์‹œ๊ฐ„์ ์œผ๋กœ ๋™์ผํ•œ์ง€ ๋น„๊ต

    - isEquals()๋Š” ๋‹จ์ˆœํžˆ ๋น„๊ต ๋Œ€์ƒ์ด ์‹œ๊ฐ„์ ์œผ๋กœ ๊ฐ™๋‹ค๋ฉด true๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค ( ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅด๊ณ  ํƒ€์ž„์กด์ด ๋‹ฌ๋ผ๋„ ์‹œ๊ฐ„์ ์œผ๋กœ ๊ฐ™์œผ๋ฉด true ๋ฐ˜ํ™˜)

    - equals()๋Š” ๊ฐ์ฒด์˜ ํƒ€์ž…, ํƒ€์ž„์กด ๋“ฑ ๋‚ด๋ถ€์˜ ๊ตฌ์„ฑ์š”์†Œ ๋ชจ๋‘๊ฐ€ ๊ฐ™์•„์•ผ true๋ฅผ ๋ฐ˜ํ™˜

4. ํƒ€์ž„์กด - ZonedDateTime

- Asia/Seoul๊ณผ ๊ฐ™์€ ํƒ€์ž„์กด ์•ˆ์—๋Š” ์ผ๊ด‘ ์ ˆ์˜ ์‹œ๊ฐ„์ œ์— ๋Œ€ํ•œ ์ •๋ณด์™€ UTC+9:00๊ณผ ๊ฐ™์€ ์˜คํ”„์…‹ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

- ์ž๋ฐ”์—์„œ๋Š” ์ด ํƒ€์ž„์กด์„ ZoneId๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

 - ZoneId.systemDefault() : ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ZoneId๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

- ZoneId.of() : ํƒ€์ž„์กด์„ ์ง์ ‘ ์ œ๊ณตํ•ด์„œ ZoneId๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

1) ZoneDateTime

- ZoneDateTime : LocalDateTime์— ์‹œ๊ฐ„๋Œ€ ์ •๋ณด์ธ ZoneId๊ฐ€ ํ•ฉ์ณ์ง„ ๊ฒƒ

//ZonedDateTime ํด๋ž˜์Šค ๊ตฌ์กฐ
pulic class ZonedDateTime {
    private final LocalDateTime dateTime;
    private final ZoneOffset offset;
    private final ZoneId zone;
}

 

- ์‹œ๊ฐ„๋Œ€๋ฅผ ๊ณ ๋ คํ•œ ๋‚ ์งœ์™€ ์‚ฌ๊ธด์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (์‹œ๊ฐ„๋Œ€๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํƒ€์ž„์กด์ด ํฌํ•จ๋จ)

2) OffsetDateTime

- OffsetDateTime์€ LocalDateTime์— UTC ์˜คํ”„์…‹ ์ •๋ณด์ธ ZoneOffset์ด ํ•ฉ์ณ์ง„ ๊ฒƒ์ด๋‹ค.

//OffsetDateTime ํด๋ž˜์Šค ๊ตฌ์กฐ
public class OffsetDateTime {
    private final LocalDateTime dateTime;
    private final ZoneOffset offset;
}

- ์‹œ๊ฐ„๋Œ€๋ฅผ ๊ณ ๋ คํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ํƒ€์ž„์กด์ด ์—†๋‹ค.

5. ๊ธฐ๊ณ„ ์ค‘์‹ฌ์˜ ์‹œ๊ฐ„ - Instant

- ์•ž์— ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ, Instant๋Š”

- UTC๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ์‹œ๊ฐ„์˜ ํ•œ ์ง€์ ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. (1970๋…„ 1์›” 1์ผ 0์‹œ 0๋ถ„ 0์ดˆ(UTC)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„์œผ๋กœ ๊ณ„์‚ฐ)

- Instant ๋‚ด๋ถ€์—๋Š” ์ดˆ ๋ฐ์ดํ„ฐ๋งŒ ๋“ค์–ด์žˆ๋‹ค.(๋‚˜๋…ธ์ดˆ ํฌํ•จ)

- Epoch ์‹œ๊ฐ„์„ ๋‹ค๋ฃจ๋Š” ํด๋ž˜์Šค(์‹œ๊ฐ„๋Œ€์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ์ ˆ๋Œ€์ ์ธ ์‹œ๊ฐ„ ํ‘œํ˜„ ๋ฐฉ์‹)

//Instant ํด๋ž˜์Šค ๊ตฌ์กฐ
public class Instant {
    private final long second;
    private final int nonos;
    ...
}

1) Instant ํŠน์ง•

* ์žฅ์ 

- ์‹œ๊ฐ„๋Œ€ ๋…๋ฆฝ์„ฑ : UTC์˜ ํŠน์ • ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฏ€๋กœ ์ „ ์„ธ๊ณ„ ์–ด๋””์„œ๋‚˜ ๋™์ผํ•œ ์‹œ์ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค.

- ๊ณ ์ •๋œ ๊ธฐ์ค€์  : Instant๋Š” 1970๋…„ 1์›” 1์ผ UTC๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๊ณ„์‚ฐ ๋ฐ ๋น„๊ต๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ์ผ๊ด€๋œ๋‹ค.

 

* ๋‹จ์ 

- ์‚ฌ์šฉ์ž ์นœํ™”์ ์ด์ง€ ์•Š์Œ : ๊ธฐ๊ณ„์ ์ธ ์‹œ๊ฐ„ ์ฒ˜๋ฆฌ์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ์—๋Š” ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค.

- ์‹œ๊ฐ„๋Œ€ ์ •๋ณด ๋ถ€์žฌ : ์‹œ๊ฐ„๋Œ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

 

* ์‚ฌ์šฉ ์˜ˆ

- ์ „ ์„ธ๊ณ„์ ์ธ ์‹œ๊ฐ„ ๊ธฐ์ค€ ํ•„์š” ์‹œ

- ์‹œ๊ฐ„๋Œ€ ๋ณ€ํ™˜ ์—†์ด ๊ณ„์‚ฐ ํ•„์š” ์‹œ

- ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ตํ™˜

- ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” localDateTime, zonedDateTime์„ ์‚ฌ์šฉํ•˜๊ณ , Instant๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋งŒ ์‚ฌ์šฉ

 

- now() : UTC๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์˜ Instant ์ƒ์„ฑ

- from() : ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ Instant๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

- OfEpochSecond() : ์—ํฌํฌ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ Instant๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

- plusSeconds() : ์ดˆ๋ฅผ ๋”ํ•œ๋‹ค

- getEpochSecond() : ์—ํฌํฌ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ๋ฅธ ์ดˆ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

5. ๊ธฐ๊ฐ„, ์‹œ๊ฐ„์˜ ๊ฐ„๊ฒฉ - Duration, Period

๊ตฌ๋ถ„ Period Duration
๋‹จ์œ„ ๋…„, ์›”, ์ผ ์‹œ๊ฐ„, ๋ถ„, ์ดˆ, ๋‚˜๋…ธ์ดˆ
์‚ฌ์šฉ๋Œ€์ƒ ๋‚ ์งœ ์‹œ๊ฐ„
์ฃผ์š” ๋ฉ”์„œ๋“œ getYears(), getMonths(), getDays() toHours(), toMinutes(), getSeconds(),
getNano

 

1) Period

- ๋‘ ๋‚ ์งœ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ๋…„, ์›”, ์ผ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

//Period ํด๋ž˜์Šค ๊ตฌ์กฐ
public calss Period {
    private final int years;
    private final int months;
    private final int days;
}

2) Duration

- ๋‘ ์‹œ๊ฐ„ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์‹œ, ๋ถ„, ์ดˆ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

//Duration ํด๋ž˜์Šค ๊ตฌ์กฐ
public class Duration {
    private final long seconds;
    private final int nonos;
}

6. ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค

- ํŠน์ • ์‹œ์ ์˜ ์‹œ๊ฐ„ : Temproal(TemproalAccessor ํฌํ•จ) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

- ์‹œ๊ฐ„์˜ ๊ฐ„๊ฒฉ : TemproalAmount ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

- TemporalAccessor๋Š” ์ฝ๊ธฐ ์ „์šฉ ์ ‘๊ทผ์„, Temporal์€ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋ชจ๋‘๋ฅผ ์ง€์›ํ•œ๋‹ค.

- TemproalAmount ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‹œ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๊ฐ์ฒด์— ์ ์šฉํ•˜์—ฌ ๊ทธ ๊ฐ์ฒด๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

1) ์‹œ๊ฐ„์˜ ๋‹จ์œ„์™€ ํ•„๋“œ

- ์‹œ๊ฐ„์˜ ๋‹จ์œ„๋ฅผ ๋œปํ•˜๋Š” TemproalUnit๊ณผ ์‹œ๊ฐ„์˜ ๊ฐ ํ•„๋“œ๋ฅผ ๋œปํ•˜๋Š” TemproalField๊ฐ€ ์žˆ๋‹ค.

 

*์‹œ๊ฐ„์˜ ๋‹จ์œ„ - TemproalUnit, ChoronoUnit

- TemporalUnit ์ธํ„ฐํŽ˜์ด์Šค : ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๋‹จ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

- ChronoUnit : ๋‹ค์–‘ํ•œ ์‹œ๊ฐ„ ๋‹จ์œ„๋ฅผ ์žฌ๊ณตํ•œ๋‹ค.

 

* ์‹œ๊ฐ„์˜ ํ•„๋“œ - TemproalField

- ChronoField๋Š” ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ด๊ฑฐํ˜•์ด๋‹ค. ์ด ์—ด๊ฑฐํ˜•์€ ๋‹ค์–‘ํ•œ ํ•„๋“œ๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ„์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

2) ํŽธ์˜ ๋ฉ”์„œ๋“œ ์ œ๊ณต

- get(TemproalField field)์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋Š” ๋ฐ ์ด๋ฅผ getXxx()๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

- ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์€ ํŽธ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ get(TemoriakField field)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

7. ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ฌธ์ž์—ด ํ”ผ์‹ฑ๊ณผ ํฌ๋งทํŒ…

- ํฌ๋งทํŒ… : ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ํฌ๋งท์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ (Date -> String)

- ํŒŒ์‹ฑ : ๋ฌธ์ž์—ด์„ ๋‚ ์งœ์™€ ์‹œ๊ฐ„๋ฐ์ดํ„ฐ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ ( String -> Date)

- LocalDate์™€ ๊ฐ™์€ ๋‚ ์งœ ๊ฐ์ฒด๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด DateTimeFormatter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

- ์ฐธ๊ณ  : https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

1) ๋ฌธ์ž์—ด์„ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์œผ๋กœ ํŒŒ์‹ฑ

- ๋ฌธ์ž์—ด์„ ์ฝ์–ด์„œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ํŒŒ์‹ฑ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋ฌธ์ž์—ด์˜ ์–ด๋Š ๋ถ€๋ถ„์ด ๋…„, ์›”, ์ผ์ธ์ง€ ๊ฐ๊ฐ์˜ ์œ„์น˜๋ฅผ ์ •ํ•ด์„œ ์ฝ์–ด์•ผ ํ•œ๋‹ค.

LocalDate.parse(inputm formatter)

 

- ์ฐธ๊ณ  : ๊น€์˜ํ•œ์˜ ์‹ค์ „ ์ž๋ฐ” - ์ค‘๊ธ‰ 1ํŽธ

๋Œ“๊ธ€