Programming/Java \ Spring

🔥자바스터디🔥 자바의 정석 CH10 날짜와 시간 형식화

1. 날짜와 시간

 

1.1 Calendar 와 Date

 

     Calendar와 GregorianCalendar

 

       - Calendar는 추상 클래스이며, 이를 상속받아 구현한 클래스가 GregorianCalendar(태국 외 모든 국가),

         BuddihistCalendar(태국)

       - .getInstance() 를 통해 완성된 객체를 반환하여 사용하거나, (static 메소드)

         상속받아 구현된 GregorianCalendar를 이용해서 인스턴스를 반환하여 사용한다.

//1. Calendar를 Date로 변환

Calendar cal = Calendar.getInstance();
Data d = new Date(cal.getTimeInMillis()); //Date(long date)
    
//2. Date를 Calendar로 변환

Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(d);

2. 형식화 클래스

 

2.1 DecimalFormat

 

    - 숫자 데이터를 정수, 부동소수점, 금액 등의 다양한 형식으로 표현할수 있다.

      일정한 형식의 텍스트 데이털르 숫자로 변환하는 것도 가능하다.

사용방법

       double number = 123456.789;

       DecimalFormat df = new DecimalFormat("#.#E0");

       String result = df.format(number);

 

- parse 메소드는 기호와 문자가 포함된 문자열을 숫자로 변환 가능 

  Integer.parseInt 는 콤마가 포함된 문자열을 숫자로 변환하지 못한다.

 

2.2 SimpleDateFormat

 

    - DateFormat을 상속받은 클래스

    - getDateInstance()를 이용하여 반환되는 객체는 SimpleDateFormat 객체이다.

사용방법

       Date today = new Date();

       SimpleDateFormat df = new SimpleDateFormat ("yyyy-mm-dd");

       String result = df.format(today);

 

2.3 ChoiceFormat

       

        - 특정 범위에 속하는 값을 문자열로 변환해준다.

        - 경계값(범위)는 double형 오름차순으로 정렬

        - 치환될 문자열의 개수는 경계값에 의해 정의된 범위의 개수와 일치해야한다.

        - 패턴화하여 사용할수도 있다. (구분자로 #(경계값을 범위에 포함)과 <(경계값을 범위에 미포함)를 제공한다.)

 

2.3 MessageFormat

 

        - 데이터를 정해진 양식에 맞게 출력할수 있도록 해준다

 

3. java.time 패키지

     - String 클래스처럼 immutable 하다.

     - 날짜나 시간을 변경하는 메소드들은 기존의 객체를 변경하는 대신 항상 변경된 새로운 객체를 반환한다.

 

3.1 java.time 패키지의 핵심 클래스

 

      - 날짜와 시간을 별도의 클래스로 분리

                LocalDate + LocalTime => LocalDateTime
                      날짜           시간               날짜&시간

                LocalDateTime + 시간대 => ZonedDateTIme
    

       - Period : 두 날짜간의 차이를 표현

         Duration : 시간의 차이를 표현

 

        - 객체 생성 

              1) now() : 현재 날짜와 시간을 저장하는 객체를 생성

              2) of() : 단순히 해당 필드의 값을 순서대로 지정

 

       TemporalUnit :  날짜와 시간의 단위를 정의 (구현 : ChronoUnit(열거형))

       TemporalField : 년, 월, 일 등 날짜와 시간의 필드를 정의 (구현 : ChronoField(열거형))

            - 특정 날짜와 시간에서 지정된 단위의 값을 더하거나 뺄 때는 plus() 또는 minus()에 값과 함께 열거형 ChronoUnit 사용

 

3.2 LocalDate와 LocalTime

 

      - Calendar와 다르게 월의 범위가 1~12, 요일은 월요일 1~일요일 7

      - 특정 필드값을 변경하려면 with으로 시작하는 메소드를 사용(항상 변경된 새로운 새객체 반환)

      - 날짜와 시간의 비교 - isAfter(), isBefore(), isEqual()

 

3.3 instant

 

       - 에포크 타임(1970-01-01 00:00:00 UTC) 부터 경과된 시간을 나노초 단위로 표현

       - Instant 와 Date 간의 변환

                 static Date           from(Instnat instant) // instant -> Date

                 Instant                toInstant()                  // Date -> Instant

 

3.4 LocalDateTime 과 ZonedDateTime

3.5 TemporalAdjusters

 

       - 자주 쓰일만한 날짜 계산들을 대신 해주는 메소드를 정의해둔 클래스

 

3.6 Period와 Duration

 

          - between() : 두날짜(시간) 사이의 차이를 나타낸다. 이전이면 양수, 이후면 음수 (static메소드)

            비슷한 메소드로 until() 이 있다.(인스턴스 메소드)

 

3.7 파싱과 포맷