ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 자바 기본 API - java.time Package
    CSE/Java 2016. 4. 19. 14:27

    자바 기본 API는 여러 절로 구성되어 있습니다.



    Intro

    Object Class

    Objects Class

    System Class

    Class Class

    String Class

    StringTokenizer, StringBuffer, StringBuilder Class

    Regular Expression & Pattern Class

    Arrays Class

    Wrapper Class

    Math, Random Class

    Date, Calendar Class

    Format Class

    java.time Package



    java.time Package

     자바 8부터 날짜와 시간을 나타내는 여러 가지 API를 새롭게 추가하였습니다. 이 API는 java.util 패키지에 없고 별도의 java.time 패키지와 하위 패키지로 제공됩니다.










     날짜와 시간 객체 생성

      java.time 패키지에는 다음과 같이 날짜와 시간을 표현하는 5개의 클래스가 있습니다.




     

     * DateTimeCreateExam.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    package api;
     
     
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    import java.time.ZoneId;
    import java.time.ZonedDateTime;
     
    public class DateTimeCreateExam {
     
        public static void main(String[] args) throws InterruptedException {
            LocalDate currDate = LocalDate.now();
            System.out.println("현재 날짜: " + currDate);
            
            LocalDate targetDate = LocalDate.of(2030314);
            System.out.println("목표 날짜: " + targetDate);
            
            LocalTime currTime = LocalTime.now();
            System.out.println("현재 시간: " + currTime);
            
            LocalDateTime currTimeDate = LocalDateTime.now();
            System.out.println("현재 날짜와 시간: " + currTimeDate);
            
            ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
            System.out.println("협정 세계 시간: " + utcDateTime);
            ZonedDateTime nyDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));
            System.out.println("뉴욕 시간: " + nyDateTime);
            
        }
     
    }
     
     
     
    cs





     날짜와 시간에 대한 정보 얻기

      LocalDate 와 LocalTime은 프로그램에서 날짜와 시간 정보를 이용할 수 있도록 여러 메서드를 제공합니다.


     * LocalDate : https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html

     * LocalTime: https://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html



      LocalDateTime과 ZonedDateTime은 날짜와 시간 정보를 모두 갖고 있기 때문에 위 표에 나와 있는 대부분의 메서드를 가지고 있습니다. 단, isLeapYear()는 LocalDate에만 있기 때문에 toLocalDate() 메서드로 LocalDate 로 변환한 후에 사용할 수 있습니다. ZonedDateTime은 시간 존에 대한 정보를 제공하는 다음 메서드들을 추가적으로 제공하고 있습니다.






     * DateTimeInfoExam.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    package api;
     
     
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.time.ZoneOffset;
    import java.time.ZonedDateTime;
     
    public class DateTimeInfoExam {
     
        public static void main(String[] args) {
            LocalDateTime now = LocalDateTime.now();
            System.out.println(now);
            
            String strDateTime = now.getYear() + "년 ";
            strDateTime += now.getMonthValue() + "월 ";
            strDateTime += now.getDayOfMonth() + "일 ";
            strDateTime += now.getDayOfWeek() + " ";
            System.out.println(strDateTime);
            
            LocalDate nowDate= now.toLocalDate();
            if (nowDate.isLeapYear()) {
                System.out.println("올해는 윤년이 있네요");
            } else {
                System.out.println("올해는 윤년이 없네요");
            }
            
            ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
            System.out.println("협정 세계시: " + utcDateTime);
            ZonedDateTime seoulDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
            System.out.println("협정 세계시: " + seoulDateTime);
            
            ZoneId zoneID = seoulDateTime.getZone();
            System.out.println("서울 존 아이디: " + zoneID);
            ZoneOffset zoneOffset = seoulDateTime.getOffset();
            System.out.println("서울 존 오프셋: " + zoneOffset);
            
        }
     
    }
     
     
     
    cs







     날짜와 시간 조작하기

      날짜와 시간 클래스들은 날짜와 시간을 조작하는 메서드와 상대 날짜를 리턴하는 메서드들을 가지고 있습니다.

      

      빼기와 더하기(minusXXX, plusXXX) 각 메서드들은 수정된 LocalDate, LocalTime, LocalDateTime, ZonedDateTime 을 리턴하기 때문에 . 연산자로 연결해서 순차적으로 호출할 수 있습니다.


      다음은 날짜와 시간을 변경하는 메서드들입니다.






     [출처: Java API Documents]


      with(TemporalAdjuster adjuster) 메서드를 제외한 나머지는 이름만으로 어떤 것을 수정하는 지 쉽사리 알 수 있습니다. with() 메서드는 현재 날짜를 기준으로 해의 첫 번째 일 또는 마지막 일, 달의 첫 번째 일 또는 마지막 일,등의 상대적인 날짜를 리턴합니다.


    https://docs.oracle.com/javase/8/docs/api/java/time/temporal/TemporalAdjusters.html



     

     날짜와 시간 비교하기

      날짜와 시간 클래스들은 다음과 같이 비교하거나 차이를 구하는 메서드들이 있습니다.







      Period와 Duration 은 날짜와 시간의 양을 나타내는 클래스입니다. Period는 년, 달, 일의 양을 나타내는 클래스이고, Duration은 시, 분, 초, 나노초의 양을 나타내는 클래스입니다. 




     * DateTimeCompareExam.java


     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    package api;
     
     
    import java.time.LocalDateTime;
    import java.time.Period;
    import java.time.temporal.ChronoUnit;
     
    public class DateTimeCompareExam {
     
        public static void main(String[] args) {
            LocalDateTime startDateTime = LocalDateTime.of(202011900);
            System.out.println("시작일: " + startDateTime);
     
            LocalDateTime endDateTime = LocalDateTime.of(2021214900);
            System.out.println("종료일: " + endDateTime);
     
            System.out.println("[종료까지 남은 시간]");
            long remainYear = startDateTime.until(endDateTime, ChronoUnit.YEARS);
            long remainMonth = startDateTime.until(endDateTime, ChronoUnit.MONTHS);
            long remainDay = startDateTime.until(endDateTime, ChronoUnit.DAYS);
            long remainHour = startDateTime.until(endDateTime, ChronoUnit.HOURS);
            long remainMinute = startDateTime.until(endDateTime, ChronoUnit.MINUTES);
            long remainSecond = startDateTime.until(endDateTime, ChronoUnit.SECONDS);
            
            remainYear = ChronoUnit.YEARS.between(startDateTime, endDateTime);
            remainMonth = ChronoUnit.MONTHS.between(startDateTime, endDateTime);
            remainDay = ChronoUnit.DAYS.between(startDateTime, endDateTime);
            remainHour = ChronoUnit.HOURS.between(startDateTime, endDateTime);
            remainMinute = ChronoUnit.MINUTES.between(startDateTime, endDateTime);
            remainSecond = ChronoUnit.SECONDS.between(startDateTime, endDateTime);
            
            System.out.println("남은 해: " + remainYear);
            System.out.println("남은 달: " + remainMonth);
            System.out.println("남은 일: " + remainDay);
            System.out.println("남은 시간: " + remainHour);
            System.out.println("남은 분: " + remainMinute);
            System.out.println("남은 초: " + remainSecond);
            
            System.out.println("[종료까지 남은 기간]");
            Period period = Period.between(startDateTime.toLocalDate(), endDateTime.toLocalDate());
            System.out.print("남은 기간: " + period.getYears() + " 년 ");
            System.out.print(period.getMonths() + "월 ");
            System.out.println(period.getDays() + "일");
            
            
        }
     
    }
     
     
     
    cs








    end

     


     * 이 포스트은 서적 '이것이 자바다' 를 참고하여 작성한 포스트입니다.


    댓글

Designed by Tistory.