-
[Java] 자바 기본 API - java.time PackageCSE/Java 2016. 4. 19. 14:27
자바 기본 API는 여러 절로 구성되어 있습니다.
StringTokenizer, StringBuffer, StringBuilder Class
Regular Expression & Pattern Class
java.time Package
자바 8부터 날짜와 시간을 나타내는 여러 가지 API를 새롭게 추가하였습니다. 이 API는 java.util 패키지에 없고 별도의 java.time 패키지와 하위 패키지로 제공됩니다.
날짜와 시간 객체 생성
java.time 패키지에는 다음과 같이 날짜와 시간을 표현하는 5개의 클래스가 있습니다.
* DateTimeCreateExam.java
1234567891011121314151617181920212223242526272829303132333435package 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(2030, 3, 14);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
1234567891011121314151617181920212223242526272829303132333435363738394041424344package 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051package 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(2020, 1, 1, 9, 0, 0);System.out.println("시작일: " + startDateTime);LocalDateTime endDateTime = LocalDateTime.of(2021, 2, 14, 9, 0, 0);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* 이 포스트은 서적 '이것이 자바다' 를 참고하여 작성한 포스트입니다.'CSE > Java' 카테고리의 다른 글
[Java] 예외 처리 - 리소스 닫기 & 예외 넘기기(Throw) (0) 2016.04.21 [Java] 예외 처리 - 예외 처리 코드 (0) 2016.04.21 [Java] 예외 처리 - 예외 & 실행 예외 (0) 2016.04.21 [Java] 자바 기본 API - Format Class (0) 2016.04.19 [Java] 자바 기본 API - Date, Calendar Class (0) 2016.04.16 [Java] 자바 기본 API - Math, Random Class (0) 2016.04.16