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

๐Ÿ“š์ฝ์€ ์ฑ… ์ •๋ฆฌ/์ž๋ฐ” ๋งˆ์Šคํ„ฐ๋ถ

[์ž๋ฐ” ๋งˆ์Šคํ„ฐ๋ถ] 9์žฅ ๋‚ ์งœ ์ฒ˜๋ฆฌ ๊ณต๋žตํ•˜๊ธฐ

9.1 Date์™€ Calendar ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ

Date๋Š” ์ผ์‹œ, ํŠน์ •์˜ ์‹œ๊ฐ„์„ ๋ณด๊ด€ํ•˜๋Š” ํด๋ž˜์Šค์ด๊ณ  Calendar๋Š” ์—ฐ, ์›”, ์ผ, ์‹œ, ๋ถ„, ์ดˆ ๋‹จ์œ„๋กœ ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ค์ •/์ทจ๋“/๊ฐ€์‚ฐ/๊ฐ์‚ฐํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค์ด๋‹ค.

 

Date ํด๋ž˜์Šค ์‚ฌ์šฉํ•˜๊ธฐ

        //1
        Date date1 = new Date();
        System.out.println(date1);
        
        //2
        Date date2 = new Date(5000);
        System.out.println(date2);

1๋ฒˆ ์ฝ”๋“œ๋Š” ํ˜„์žฌ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•˜๊ณ  2๋ฒˆ ์ฝ”๋“œ๋Š” 1970๋…„์—์„œ 5000ms ์ง€๋‚œ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

Dateํด๋ž˜์Šค๋Š” setTime์œผ๋กœ ์‹œ๊ฐ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ถˆ๋ณ€๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค.

 

Calendar ํด๋ž˜์Šค ์‚ฌ์šฉํ•˜๊ธฐ

        Calendar calendar = Calendar.getInstance();
        System.out.println(" ์บ˜๋ฆฐ๋”์˜ ๊ฐ’");
        System.out.println(calendar);
        System.out.println(" getTime์˜ ๊ฐ’");
        System.out.println(calendar.getTime());
        
//      ::์ถœ๋ ฅ๊ฐ’::
//        ์บ˜๋ฆฐ๋”์˜ ๊ฐ’
//        java.util.GregorianCalendar[time=1631543616989,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=8,WEEK_OF_YEAR=38,WEEK_OF_MONTH=3,DAY_OF_MONTH=13,DAY_OF_YEAR=256,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=33,SECOND=36,MILLISECOND=989,ZONE_OFFSET=32400000,DST_OFFSET=0]
//        getTime์˜ ๊ฐ’
//        Mon Sep 13 23:33:36 KST 2021

 

getTime()์„ ์ด์šฉํ•ด์•ผ ์ •๋ฆฌ๋œ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์บ˜๋ฆฐ๋” ํด๋ž˜์Šค๋Š” Date ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ์—ฐ, ์›”, ์ผ, ์‹œ, ๋ถ„, ์ดˆ ๋‹จ์œ„๋กœ ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ค์ •, ์ทจ๋“, ๊ฐ€์‚ฐ, ๊ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์ž.

        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.MINUTE, 18); // ๋ถ„๋งŒ ์ง€์ •
        System.out.println(calendar.getTime());

        calendar.set(2222, 10, 10, 11, 12 ,13); // ๋ชจ๋‘ ์ง€์ •
        System.out.println(calendar.getTime()); 
        System.out.println(calendar.get(Calendar.DATE)); // ๋‚ ์งœ๋งŒ ์ถœ๋ ฅ์ •

        calendar.add(Calendar.YEAR, 2); // 2๋…„ ํ›„
        System.out.println(calendar);

 

% ์บ˜๋ฆฐ๋” set ์ฃผ์˜์‚ฌํ•ญ %

์บ˜๋ฆฐ๋”์˜ ์›”์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์— ์กฐ์‹ฌํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค. Calendarํด๋ž˜์Šค๋Š” ์›”์„ 0 ~ 11์˜ ๊ฐ’์œผ๋กœ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ 1์›”์ด๋ฉด 0์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ์‹์œผ๋กœ -1ํ•ด์•ผ๋งŒ ํ•œ๋‹ค. ์‹ค์ˆ˜๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก Calendarํด๋ž˜์Šค์˜ ์ƒ์ˆ˜๋ฅผ ์ด์šฉํ•˜์ž.

 

9.1.3 Dateํด๋ž˜์Šค์™€ Calendarํด๋ž˜์Šค์˜ ์ƒํ˜ธ ๊ตํ™˜ ์‹ค์‹œํ•˜๊ธฐ

Dateํด๋ž˜์Šค๋Š” ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๊ณ„์‚ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด์™€ ๋ฐ˜๋Œ€๋กœ Calendarํด๋ž˜์Šค๋Š” ๋‚ ์งœ์™€ ์‹œ๊ฐ„์˜ ๊ณ„์‚ฐ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ฌธ์ž์—ด์˜ ์ƒํ˜ธ ๋ณ€ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค..

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ์œ„ํ•ด ์ƒํ˜ธ ๋ณ€ํ™˜์ด ํ•„์š”ํ•˜๋‹ค.

 

  • Calendar -> Date
    • getTime()์„ ์ด์šฉํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณด๊ด€ํ•œ ์‹œ๊ฐ„์„ Date ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();

 

  • Date -> Calendar
    • setTime(Date ์ธ์Šคํ„ด์Šค) ๋ฅผ ์ด์šฉํ•œ๋‹ค.
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

 

์ด ๋‘ ํด๋ž˜์Šค ๊ฐ„ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์ž.

9.1 Date and Time API ์‚ฌ์šฉํ•˜๊ธฐ

๊ธฐ์กด์˜ Date, Calendar ๋‚ ์งœ ํด๋ž˜์Šค๋“ค์€ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ํŠน์ง•๋“ค์ด ์žˆ๋‹ค.

๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์˜ค๋ฅ˜์˜ ์›์ธ์ด ๋˜๊ธฐ๋„ ํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์„œ๋กœ๊ฐ„์˜ ๋ณ€ํ™˜๋„ ํ•„์š”ํ–ˆ๋‹ค...(๋ถˆํŽธ)

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž๋ฐ” 8 ์—์„œ Date and Time API๊ฐ€ ์ถ”๊ฐ€ ๋˜์—ˆ๋‹ค.

 

9.2.1 Date and Time API์˜ ์žฅ์ 

  • ๋‚ ์งœ, ์‹œ๊ฐ„, ์ผ์‹œ๋ฅผ ๊ฐ๊ฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์—ฐ, ์›”, ์ผ ๋”ฐ๋กœ ์ง€์ •ํ•˜์—ฌ ์ทจ๋“ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ธ์Šคํ„ด์Šค ๋˜ํ•œ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์—ฐ, ์›”, ์ผ์˜ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ถˆ๋ณ€ ๊ฐ์ฒด์ด๋‹ค.

๋‚ ์งœ, ์‹œ๊ฐ„, ์ผ์‹œ, ๋ณ„๋„๋กœ ์ทจ๊ธ‰

  • ๋‚ ์งœ => java.time.LocalDate ํด๋ž˜์Šค (๋‚ ์งœ๋งŒ)
  • ์‹œ๊ฐ„ => java.time.LocalTime ํด๋ž˜์Šค (์‹œ๊ฐ„๋งŒ)
  • ์ผ์‹œ => java.time.LocalDateTime ํด๋ž˜์Šค (๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„)
        LocalDate date = LocalDate.now(); 
        System.out.println(date); // 2021-09-13

        LocalTime time = LocalTime.now();
        System.out.println(time); // 23:55:33.855146

        LocalDateTime dateTime = LocalDateTime.now();
        System.out.println(dateTime); // 2021-09-13T23:55:33.855196

 

of ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ง€์ •ํ•˜๊ธฐ

System.out.println(LocalDateTime.of(2021, Month.SEPTEMBER, 14, 0, 12));

์ถœ๋ ฅ๊ฐ’ : 2021-09-14T00:12

 

๊ฐ ํ•„๋“œ๊ฐ’์„ ๊ฐœ๋ณ„๋กœ ์ทจ๋“ํ•˜๊ธฐ

LocalDateTime localDateTime = LocalDateTime.of(2021, Month.SEPTEMBER, 14, 0, 12);
localDateTime.getYear();
localDateTime.getMonth();
localDateTime.getSecond();

 

์œ„ ์ฒ˜๋Ÿผ ๊ฐ ํ•„๋“œ๊ฐ’์„ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์—ฐ, ์›”, ์ผ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ!

LocalDateTime localDateTime = LocalDateTime.of(2021, Month.SEPTEMBER, 14, 0, 12);

System.out.println(localDateTime.plusDays(3));
System.out.println(localDateTime.minusDays(120));
System.out.println(localDateTime.plusMinutes(22));

System.out.println(localDateTime);

 

๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚ ์งœ๋ฅผ ๊ฐ€์ ธ์™€๋„ ๊ฐ๊ฐ์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋กœ ์ธํ•ด์„œ ์›๋ž˜ ์ธ์Šคํ„ด์Šค์˜ ๋‚ ์งœ๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

 

9.3 ๋‚ ์งœ ํด๋ž˜์Šค์™€ ๋ฌธ์ž์—ด ์ƒํ˜ธ ๊ตํ™˜ํ•˜๊ธฐ

9.3์€ ์˜ˆ์ „ ๋‚ ์งœ ํด๋ž˜์Šค์ธ Date๋ฅผ ๋ฌธ์ž์—ด์— ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค.

9.3.1 ๋‚ ์งœ ํด๋ž˜์Šค๋ฅผ ์ž„์˜์˜ ํ˜•์‹์œผ๋กœ ๋ฌธ์ž์—ด ์ถœ๋ ฅํ•˜๊ธฐ

        Date date = new Date();
        DateFormat dateFormat = new SimpleDateFormat("yyyy๋…„MM์›”ddHHmmss");
        System.out.println(dateFormat.format(date));

dateFormat์„ ํ†ตํ•ด ๋‚ ์งœ ์ถœ๋ ฅ ํ˜•์‹์„ ์ •ํ•˜๋ฉด ๊ทธ ํ˜•ํƒœ๋กœ date๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

SimpleDateFormat์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด ๋ฌธ์ž๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

9.3.2 ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„๋œ ๋‚ ์งœ๋ฅผ Date ํด๋ž˜์Šค๋กœ ํ‘œํ˜„ํ•˜๊ธฐ

        DateFormat dateFormat = new SimpleDateFormat("yyyy๋…„MM์›”ddHHmmss");

        try {
            Date date = dateFormat.parse("2021๋…„09์›”11223344");
            System.out.println(date);
        } catch (ParseException exception) {
            System.out.println(exception.getMessage());
        }

์ถœ๋ ฅ๊ฐ’ : Sat Sep 11 22:33:44 KST 2021

 

dateFormat์— ์ง€์ •ํ•œ๋Œ€๋กœ ์ ํžŒ ๋ฌธ์ž์—ด์„ parseํ•˜๋ฉด ํ•ด๋‹นํ•˜๋Š” ๋‚ ์งœ/์‹œ๊ฐ„ ๊ฐ’๋งŒ ๋ฝ‘์•„์„œ Date ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

 

์ถ”๊ฐ€์ ์œผ๋กœ SimpleDateFormatํด๋ž˜์Šค๋Š” ์Šค๋ ˆ๋“œ ์„ธ์ดํ”„๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ ํ•˜๋‹ˆ ์•Œ์•„๋‘์ž.

 

9.4 Date and Time API๋กœ ๋‚ ์งœ/์‹œ๊ฐ„ ํด๋ž˜์Šค์™€ ๋ฌธ์ž์—ด ์ƒํ˜ธ ๊ตํ™˜ํ•˜๊ธฐ

LocalDateTimeํด๋ž˜์Šค ๋“ฑ์˜ Data and Time API์˜ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ DateTimeFormatter ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ๋‹ค.

9.4.1 ๋‚ ์งœ/์‹œ๊ฐ„ ํด๋ž˜์Šค๋ฅผ ์ž„์˜์˜ ํ˜•์‹์œผ๋กœ ๋ฌธ์ž์—ด ์ถœ๋ ฅ

LocalDateTime date = LocalDateTime.now();
System.out.println(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS").format(date));

์ถœ๋ ฅ๊ฐ’ : 2021/09/14 00:29:41.985

 

ofPattern์œผ๋กœ ์ถœ๋ ฅํ˜•ํƒœ๋ฅผ ์ง€์ •ํ•˜๊ณ  .format์œผ๋กœ ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

๋งŒ์•ฝ LocalDate ์ฒ˜๋Ÿผ ๋‚ ์งœ๋งŒ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์— ์‹œ๊ฐ„ ๋ฌธ์ž์—ด ํ˜•์‹์„ ์ง€์ •ํ•˜๊ฒŒ ๋˜๋ฉด UnsupportedTemporalTypeException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

 

9.4.2 ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„๋œ ๋‚ ์งœ๋ฅผ ๋‚ ์งœ/์‹œ๊ฐ„ ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

๋ฌธ์ž์—ด ---> ๋‚ ์งœ/์‹œ๊ฐ„ ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜์‹œ์—๋„ DateTimeFormatter ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋Œ€์‹  format์ด ์•„๋‹Œ parse ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

TemporalAccessor parsed = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
                                                                            .parse("2021/09/21 20:10:11");
LocalDateTime dateTime = LocalDateTime.from(parsed);

 

TemporalAccessor๋ฅผ from ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ ๋ฐ›์œผ๋ฉด LocalDateTime์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.