Backend/SpringBoot

날짜와 시간

Mo'Greene 2022. 6. 22. 00:47

2-1. 날짜와 시간 다루기

  • 이번 장의 목표
    • 기본적인 날짜와 시간을 출력 및 데이터를 가공하는 방법에 대해서 배워보겠습니다.
    1. Java에서의 날짜와 시간
    • Java를 기반으로 하는 개발을 할 때 날짜를 이용하여 여러 기능을 제공해야 할 때가 있습니다. 날짜와 시간을 처리하는 클래스들을 다루면서 하나씩 공부를 해보겠습니다!
    • 우리는 이제 날짜와 시간을 사용할 때 자주 쓰이는 java.time패키지에 대해서 하나씩 살펴볼 것입니다!
    <aside> 👉 패키지(package)란? 간단하게는 클래스의 묶음이라고 할 수 있습니다. 패키지에는 클래스 혹은 인터페이스를 포함시킬 수 있으며 관련된 클래스끼리 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있습니다.
    • 먼저, 하나씩 설명을 하기 전에 어떤 것들이 있는지 간단한 예제를 한번 보겠습니다!
    • [코드스니펫] 날짜와 시간 다루기 예제 - Main 함수
    • public class Main { public static void main(String[] args) { } }
    public class Main {
        public static void main(String[] args) {
            System.out.println("now()를 활용하여 생성");
            LocalDate date = LocalDate.now();
            LocalTime time = LocalTime.now();
            LocalDateTime dateTime = LocalDateTime.now();
    
            System.out.println(date);
            System.out.println(time);
            System.out.println(dateTime);
    
            System.out.println("of()를 활용하여 생성");
            LocalDate newDate = LocalDate.of(2021, 03, 29);
            LocalTime newTime = LocalTime.of(22, 50, 55);
    
            System.out.println(newDate);
            System.out.println(newTime);
        }
    }
    
    → 한번 실제로 실행을 해보셨나요? 출력결과를 확인하면 각 클래스가 어떤 정보를 제공하는지 느낌이 오실겁니다.</aside>
    • LocalDateLocalTime은 java.time 패키지의 가장 기본이 되는 클래스 입니다. 이 두가지를 사용하는데 익숙해지시면 활용을 하는 것은 훨씬 쉬워질 것입니다!
  • <aside> 👉 now() vs of() 위 예제에서 사용한 now() 와 **of()**는 객체를 생성할 때 사용됩니다. now()는 현재의 날짜 시간을, of()는 지정하는 값이 필드에 담겨집니다.
  • </aside>
    1. 날짜와 시간의 형식 수정
    • 날짜와 시간을 출력하는 방법을 알아봤습니다. 하지만, 출력문의 결과가 원하는 형식이 아닐 수 있습니다. 이럴 때 우리는 날짜와 시간을 원하는 형식으로 출력할 수 있어야 합니다. 아래 예제를 한번 실습해볼까요?
    • [코드스니펫] 날짜와 시간 형식 수정 예제 - Main 함수
    • public class Main { public static void main(String[] args) { } }
    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
    String shortFormat = formatter.format(LocalTime.now());
    System.out.println(shortFormat);
    
    → LocalDate.now() 를 했을 때와는 다르게 오전/오후가 추가되었으며 보다 직관적인 형태가 되었습니다!
    • 여기서 잠깐! 우리가 사용하고자 하는 형식이 없거나 생각하는 형식이 있을 수 있습니다. 이번에는 우리가 지정한 형식대로 출력이 될 수 있도록 해보죠!
    DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
    String myDate = newFormatter.format(LocalDate.now());
    System.out.println(myDate);
    
    → 어떻게 결과가 나왔나요? 네 맞습니다!! 😀 ofPattern에 작성한 형식대로 날짜가 출력되었을 것입니다! 이러한 방식을 활용하여 우리는 원하고자 하는 형식으로 출력을 할 수 있습니다.
  • → 형식을 변환하는데 사용한 DateTimeFormatter 클래스는 SHORT이외에도 다양한 FormatStyle 종류가 있습니다.
    1. 날짜와 시간의 차이 계산
    • 이번에는 날짜와 시간의 차이를 계산하는 방법에 대해서 알아보겠습니다!
    • [코드스니펫] 날짜와 시간 차이 계산 예제 - Main 함수
    • public class Main { public static void main(String[] args) { } }
    LocalDate today = LocalDate.now();
    LocalDate birthday = LocalDate.of(2021, 8, 9);
    Period period = Period.between(today, birthday);
    System.out.println(period.getMonths());
    System.out.println(period.getDays());
    
    → 오늘 일자와 생일 일자간의 날짜 차이를 계산하기 위해서는 **between()**을 사용하면 구할 수 있습니다. (between() 이외에도 until()로 구할 수도 있습니다.)
  • 퀴즈
    • [코드스니펫] 날짜와 시간 퀴즈 - Main 함수
    • public class Main { public static void main(String[] args) { } }
    • 답안
    • import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd h/mm"); String now = dateTimeFormatter.format(LocalDateTime.now()); System.out.println("현재시간: " + now); } }
  • 오늘의 날짜와 시간을 [연도/월/일 시간/일자]의 형식으로 값으로 출력해보세요.