Date/Time

์ƒˆ๋กœ ์ถ”๊ฐ€ ๋œ ์ด์œ 

1. java.util.Date ํด๋ž˜์Šค๋Š” mutableํ•˜์—ฌ thread safe ํ•˜์ง€ ์•Š๋‹ค.

Date date = new Date();
long time = date.getTime();
System.out.println(date); //Tue Nov 02 17:34:03 KST 2021

Thread.sleep();
Date date2 = new Date();
System.out.println(date2); //Tue Nov 02 17:34:06 KST 2021
date2.setTime(time); 
System.out.println(date2); //Tue Nov 02 17:34:03 KST 2021

Date๊ฐ์ฒด๋ฅผ ๋ณด๋ฉด setTime()๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋กœ ๋‚ด๋ถ€๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” mutableํ•˜์—ฌ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

  1. ํด๋ž˜์Šค ์ด๋ฆ„์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค. (Date์ธ๋ฐ ์‹œ๊ฐ„๊นŒ์ง€ ๋‹ค๋ฃฌ๋‹ค.) Date ๋ผ๋Š” ํด๋ž˜์Šค์ธ๋ฐ getTime()๊ณผ ๊ฐ™์ด ์‹œ๊ฐ„๊นŒ์ง€ ๋‹ค๋ฃฌ๋‹ค.

  2. ํƒ€์ž… ์•ˆ์ •์„ฑ์ด ์—†๊ณ  ์›”์ด 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋“ฑ๋“ฑ ๋ฒ„๊ทธ ๋ฐœ์ƒ์˜ ์—ฌ์ง€๊ฐ€ ๋งŽ๋‹ค.

Date date = new Date(-10000,1,1,1,1);
System.out.println(date); //Thu Feb 01 01:01:00 KST 8101

//Date
 public Date(int year, int month, int date, int hrs, int min) {
        this(year, month, date, hrs, min, 0);
}

ํƒ€์ž…์„ int๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ˆซ์ž๋ฉด ๋ชจ๋‘ ๋‹ค ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ด์ƒํ•œ ๊ฐ’์ด ์˜ฌ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

ํŠน์ง•

๊ธฐ์กด API

  • java.util.Date

  • java.util.Calendar

  • java.text.SimpleDateFormat

์ถ”๊ฐ€๋œ API

  • java.time.Instant : ๊ธฐ๊ณ„์‹œ๊ฐ„

  • java.time.LocalDate : ๋‚ ์งœ(์‹œ๊ฐ„x), ํƒ€์ž„์กดx

  • java.time.LocalTime : ์‹œ๊ฐ„(๋‚ ์งœx), ํƒ€์ž„์กดx

  • java.time.LocalDateTime : ๋‚ ์งœ/์‹œ๊ฐ„, ํƒ€์ž„์กดx

  • java.time.ZonedDateTime : ๋‚ ์งœ/์‹œ๊ฐ„, ํƒ€์ž„์กดo

  • java.time.DateTimeFormatter

  • java.time.Duration

  • java.time.Period

  • java.time.TemporalAdjuster

์‚ฌ์šฉ ์˜ˆ

1. Instant

2. LocalDate/LocalTime/LocalDateTime/ZonedDateTime

3. DateTimeFormatter

DateTimeFormatter์€ ofPattern()์„ ์ด์šฉํ•ด ํŠน์ • ํŒจํ„ด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฏธ๋ฆฌ ์ •์˜๋œ ํฌ๋งทํ„ฐ๋“ค์ด ์กด์žฌํ•˜๋Š”๋ฐ ์ด ํ˜•์‹์„ ์ด์šฉํ•˜๊ณ ์žํ•˜๋ฉด ๊ตณ์ด ์ƒˆ๋กœ ์ •์˜ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ •์˜๋œ ํฌ๋งทํ„ฐ๋“ค์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ 

๋˜ Date/Timeํƒ€์ž…์˜ parse()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํŠน์ • ๋ฌธ์ž์—ด์„ Date/Time ํƒ€์ž…์œผ๋กœ ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

4. Duration / Period

Period๋Š” ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ๋‚ ์งœ/์‹œ๊ฐ„์˜ ๊ธฐ๊ฐ„์„ ์ธก์ •, Duration์€ ์ดˆ๋‹จ์œ„(๋‚˜๋…ธ,๋ฐ€๋ฆฌ)๋กœ ๋ฐ˜ํ™˜์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋กœ ๊ธฐ๊ณ„์šฉ ์‹œ๊ฐ„๊ฐ„์˜ ๊ธฐ๊ฐ„์„ ์ธก์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ถ”๊ฐ€

Immutable ํ•œ Date/Time

Date/Time์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” mutableํ•œ ์†์„ฑ์˜ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž Immutableํ•œ ์†์„ฑ์„ ๊ฐ–๊ณ  ์„ค๊ณ„๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ ์ด ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋‚ ์งœ,์‹œ๊ฐ„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์œ„์— ์ •์˜๋œ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค.


Reference

https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/

Last updated