Java_날짜와 시간

song·2023년 10월 20일

Java

목록 보기
30/36

날짜와 시간

  • 자바에서 날짜와 관련된 객체는 3가지가 있다.

1. Date 클래스 - (java.util 패키지에 있음)

  • 날짜와 시간을 다룸
  • Date의 메서드들은 이미 deprecated(더이상 사용되지 않음) 됐지만 여전히 사용되고 있는 몇개가 있음.
  • Date today = new Date();
    System.out.println(today.getDate());
       
    SimpleDateFormat date = new SimpleDateFormat("yyyy/MM/dd");
    SimpleDateFormat time = new SimpleDateFormat("hh:mm:ss a");
    System.out.println(date.format(today));
    System.out.println(time.format(today));
    SimpleDateFormat : 날짜 보여주는 형식 지정. 월은 mm이 아니라 MM이라고 써야함. time에 a는 오전/오후 이다.

2. Calender 클래스 - (java.util 패키지에 있음)

  • 날짜와 시간을 다룸
  • Date보다 조금 더 개선된 클래스
  • 여전히 단점이 있음 (무조건 날짜랑 시간을 같이 다뤄줘야만 함)
  • ★날짜 관련된 객체중에서는 제일 많이 사용됨
  • Calender는 인터페이스로 구현된 추상클래스이기 때문에 new로 생성 못 하고 getInstance() 메서드를 통해서 인스턴스를 생성해야 한다.
    Calender cal = new Calender(); -> 이거 안됨.
  • Calender cal = Calender.getInstance();
    //Calender cal = new GregorianCalendar();
    System.out.println(cal);
    .getInstance()가 사용자의 접속한 시스템의 지역을 확인해서 달력 클래스들 중에서 하나를 반환해온다. (우리는 GregorianCalendar, 태국은 BuddhistCalendar)
    new로 만드는 것과 차이점 : 최초에 할당된 메모리를 재사용하느냐(getInstance) 못하느냐(new)의 차이
  • 현재 날짜에 연산
    • cal.get(Calendar.YEAR) : 년
    • cal.get(Calendar.MONTH) + 1 : 월
      • month는 컴퓨터에서 0부터 넣기 때문에 (1월이 0월로 나옴) +1을 해야한다.
      • 그래서 month를 넣을 때 1을 빼고 set해야한다.
    • cal.get(Calendar.DAY_OF_MONTH) : 일
    • cal.get(Calendar.DAY_OF_WEEK) : 요일 {"", "일", "월", "화", "수", "목", "금", "토"}. 맨 앞칸은 비어있다.
    • cal.get(Calendar.HOUR) : 시(12시간제)
    • cal.get(Calendar.HOUR_OF_DAY) : 시(24시간제)
    • cal.get(Calendar.MINUTE) : 분
    • cal.get(Calendar.SECOND) : 초
    • cal.get(Calendar.MILLISECOND) : 밀리초
  • 두 날짜간의 간격(차이)를 구하기 - getTimeInMillis()로 밀리초 단위로 반환
    cal.set(2023, 1, 1); : set 이용해서 특정 시간대로 설정. (년, 월, 일)
    long diff = (cal.getTimeInMillis() - cal2.getTimeInMillis()); : getTimeInMillis()는 밀리초라서 결과도 밀리초로 나온다.
    System.out.println((diff / 1000 / 60 / 60 / 24) + "일 지남"); 밀리초 > 초 > 분 > 시 > 일 순서로 나누기.
  • Date를 Calender로 변환
    Date d = new Date();
    Calender c = Calendar.getInstance();
    c.setTime(d);
  • Calender를 Date로 변환
    Date d = new Date(c.getTimeInMillis());

3. Time 패키지 - (java.time 패키지)

  • Date와 Calender 클래스들의 단점(날짜와 시간을 무조건 같이 다룸)을 개선한 클래스
  • (단점보완) 날짜(LocalDate), 시간(LocalTime)으로 구분해서 사용할 수 있다.
  • LocalDateTime이라는 클래스로 날짜와 시간을 같이 사용할 수도 있다.
  • ★단점이 아예 없는 건 아님.
  • LocalDate 날짜 클래스
    • LocalDate currDate = LocalDate.now(); : 지금 날짜
    • LocalDate prevDate = LocalDate.of(2023, 9, 19) : 지정 날짜 (년, 월, 일)
  • LocalTime 시간 클래스
    • LocalDate currDate = LocalTime.now(); : 지금 시간
    • LocalDate prevDate = LocalTime.of(2, 9, 19) : 지정 시간 (시, 분, 초)
  • LocalDateTime 시간 클래스 (LocalDate + LocalTime)
    • LocalDateTime currDateTime = LocalDateTime.now(); : 지금 날짜 시간
    • LocalDate curDate = LocalDate.now();
      LocalTime curTime = LocalTime.now();
      LocalDateTime targetDateTime = LocalDateTime.of(curDate, curTime);
      -> 특정 시간대 구하기
    • 날짜 차이 구하기 - period
      LocalDate dt1 = LocalDate.now();
      LocalDate dt2 = LocalDate.of(2023, 9, 19);
      Period pe = Period.between(dt1, dt2);
      System.out.println(pe.get(ChronoUnit.YEARS));
      -> Period에서 필드값을 뽑을 때는 get(ChronuUnit.필드명) 써야한다.
    • 시간 차이 구하기 - Duration
      LocalTime t1 = LocalTime.now();
      LocalTime t2 = LocalTime.of(20, 15, 17);
      Duration du = Duration.between(t1, t2);
      Duration에서도 필드값 뽑을 때는 get(ChronoUnit.필드명) 써야함
      근데 SECONDS랑 NANOS만 가능. 시, 분 구하려면 초에서 별도로 계산 해야 함.
      System.out.println(du.get(ChronoUnit.SECONDS));
      System.out.println(du.get(ChronoUnit.NANOS));
      SECONDS랑 NANOS 밖에 없기 때문에 그냥 Duration을 LocalTime으로 변환한 후, LocalTime의 get 메서드 이용하면 편함.
      LocalTime localTime = LocalTime.of(0, 0).plusSeconds(du.getSeconds());
profile
계속 나아가기

0개의 댓글