개발 무지렁이

[Java] 날짜 시간 클래스 LocalDateTime과 형식클래스 DateTimeFormatter 본문

Backend/자바

[Java] 날짜 시간 클래스 LocalDateTime과 형식클래스 DateTimeFormatter

Gaejirang-e 2023. 8. 9. 02:53

Date 객체와 SimpleDateFormat
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy,MM.dd HH:mm:ss");
sdf.format(now)

Date() 생성자컴퓨터의 현재 날짜를 읽어 Date객체로 만든다.
  public class DateExample {
      public static void main(String[] args) {
          Date now = new Date();
          String strNow = now.toString();
          System.out.println(strNow); //Tue Aug 09 00:55:51 KST 2023

          SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
          String formatted = sdf.format(now);
          System.out.println(formatted); //2023.08.09 00:55:51
      }
  }
Calendar now = Calendar.getInstance();
컴퓨터에 설정된 시간대를 기준으로 Calendar 하위객체를 얻을 수 있다.

✏️ Calendar에 정의된 상수get() 메서드의 매개변수로 넘겨주면, 해당 상수가 의미하는 값을 리턴한다.
📍 Calendar.YEAR
📍 Calendar.MONTH
📍 Calendar.DAY_OF_MONTH
📍 Calendar.DAY_OF_WEEK Calendar.MONDAY ...
📍 Calendar.AM_PM Calendar.AM ...
📍 Calendar.HOUR
📍 Calendar.MINUTE
📍 Calendar.SECOND

LocalDateTime 객체와 DataTimeFormatter
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy.MM.dd a HH:mm:ss");
now.format(dtf);

🎯 LocalDateTime 객체로 날짜/시간을 조작하거나 비교할 수 있다.
🕹️. 조작
ex. LocalDateTime res = now.plusYear(1);
ex. LocalDateTime res2 = now.minusMonths(2);
ex. LocalDateTime res3 = now.plusDays(7);

🩻. 비교
now.isAfter(other);
now.isBefore(other);
now.isEqual(other);

⭐. 특정 날짜 시간 기준으로 LocalDateTime 객체 얻기
LocalDateTime target = LocalDateTime.of(year, month, dayOfMonth, hour, minute, second);

⭐. 남은 일 수 계산하기

  import java.time.temporal.ChronoUnit;
  ...

  public class DateTimeCompare {
      public static void main(String[] args) {
          DateTimeFormatter dtf = DataTimeFormatter.ofPattern("yyyy,MM,dd HH:mm:ss");
          LocalDateTime startDateTime = LocalDateTime.of(2023, 8, 9, 0, 0, 0);
         System.out.println("시작일: " + startDateTime.format(dtf));

          LocalDateTime endtDateTime = LocalDateTime.of(2023, 12, 31, 0, 0, 0);
         System.out.println("종료일: " + endtDateTime.format(dtf));

          long remainDay = startDateTime.until(endDateTime, ChronoUnit.DAYS);
          System.out.println("남은 일: " + remainDay);
      }
  }
> 🦔 ChronoUnit
java.time 패키지에서 제공되는 열거형(Enum) 클래스이다.
다양한 시간 단위를 나타내는 상수를 제공

📕 참고 자료 📕
Tistory's Card

☁️ SimpleDateFormat vs DateTimeFormatter
SimpleDateFormat은 멀티 스레드 환경에서 Thread-safe를 보장하지 않는다.
DateTimeFormatter는 불변성을 가진다, 한번 설정한 포맷을 변경할 수 ❌
DateTimeFormatterLocalDateTime와 함께 사용가능 ⭕
Comments