JavaRush /Java Blog /Random-KO /자바 8 가이드. 2 부.
ramhead
레벨 13

자바 8 가이드. 2 부.

Random-KO 그룹에 게시되었습니다

날짜 API

Java 8에는 java.time 패키지에 완전히 새로운 날짜 및 시간 API가 포함되어 있습니다. 새로운 Date API는 Joda-Time 라이브러리와 유사 하지만 동일하지는 않습니다. 다음 예에서는 새 API의 가장 중요한 부분을 다룹니다.
시계
시계를 통해 현재 날짜와 시간에 액세스할 수 있습니다. 시계는 시간대를 인식하므로 System.currentTimeMillis() 대신 사용하여 현재 시간을 밀리초 단위로 반환할 수 있습니다. 이러한 종류의 시간 정밀도는 Instant 클래스 로도 표현됩니다 . Instants는 상속된 java.util.Date 객체를 생성하는 데 사용될 수 있습니다 . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
시간대
시간대는 추상 클래스 ZoneId 로 표시됩니다 . 이는 통계적 팩토리 방법을 사용하여 쉽게 액세스할 수 있습니다. 시간대는 현재 날짜와 현지 날짜 및 시간 간의 변환에 중요한 오프셋을 정의합니다. System.out.println(ZoneId.getAvailableZoneIds()); // prints all available timezone ids ZoneId zone1 = ZoneId.of("Europe/Berlin"); ZoneId zone2 = ZoneId.of("Brazil/East"); System.out.println(zone1.getRules()); System.out.println(zone2.getRules()); // ZoneRules[currentStandardOffset=+01:00] // ZoneRules[currentStandardOffset=-03:00]
현지 시각
LocalTime은 시간대 없이 시간을 표시합니다(예: 17:30:15). 다음 예에서는 위에 정의된 시간대에 대한 두 개의 현지 시간 객체를 만듭니다. 그런 다음 두 개체를 비교하고 시간과 분의 차이를 계산합니다. LocalTime now1 = LocalTime.now(zone1); LocalTime now2 = LocalTime.now(zone2); System.out.println(now1.isBefore(now2)); // false long hoursBetween = ChronoUnit.HOURS.between(now1, now2); long minutesBetween = ChronoUnit.MINUTES.between(now1, now2); System.out.println(hoursBetween); // -3 System.out.println(minutesBetween); // -239 LocalTime에는 문자열 구문 분석을 포함하여 인스턴스화를 더 쉽게 만드는 다양한 팩터리 메서드가 제공됩니다. LocalTime late = LocalTime.of(23, 59, 59); System.out.println(late); // 23:59:59 DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedTime(FormatStyle.SHORT) .withLocale(Locale.GERMAN); LocalTime leetTime = LocalTime.parse("13:37", germanFormatter); System.out.println(leetTime); // 13:37
현지 날짜
LocalDate는 특정 날짜(예: 2014-03-11)를 표시합니다. 인스턴스는 변경할 수 없으며 LocalTime과 유사하게 작동합니다. 이 예에서는 일, 월 또는 연도를 더하거나 빼서 새 날짜를 계산하는 방법을 보여줍니다. 객체에 대한 모든 작업은 새 객체를 반환한다는 점을 명심하세요. LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS); LocalDate yesterday = tomorrow.minusDays(2); LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4); DayOfWeek dayOfWeek = independenceDay.getDayOfWeek(); System.out.println(dayOfWeek); // FRIDAY 문자열에서 LocalDate를 구문 분석하는 것은 LocalTime을 구문 분석하는 것만큼 간단합니다. DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM) .withLocale(Locale.GERMAN); LocalDate xmas = LocalDate.parse("24.12.2014", germanFormatter); System.out.println(xmas); // 2014-12-24
현지 날짜시간
LocalDateTime은 날짜/시간을 표시합니다. 이는 위에 제공된 날짜와 시간을 하나의 사본으로 조합한 것입니다. LocalDateTime 인스턴스는 변경할 수 없으며 LocalTime 및 LocalDate와 유사하게 작동합니다. 메소드를 사용하여 필요한 인스턴스 속성 값을 검색할 수 있습니다. LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59); DayOfWeek dayOfWeek = sylvester.getDayOfWeek(); System.out.println(dayOfWeek); // WEDNESDAY Month month = sylvester.getMonth(); System.out.println(month); // DECEMBER long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY); System.out.println(minuteOfDay); // 1439 추가 시간대 정보와 함께 인스턴스를 인스턴트로 변환할 수 있습니다. Instants는 java.util.Date에서 상속된 이전 유형으로 쉽게 변환될 수 있습니다. Instant instant = sylvester .atZone(ZoneId.systemDefault()) .toInstant(); Date legacyDate = Date.from(instant); System.out.println(legacyDate); // Wed Dec 31 23:59:59 CET 2014 날짜-시간 형식 지정은 날짜 또는 시간 형식 지정과 동일한 방식으로 작동합니다. 미리 정의된 날짜 형식을 사용하는 대신 수동으로 정의된 형식을 사용할 수 있습니다. DateTimeFormatter formatter = DateTimeFormatter .ofPattern("MMM dd, yyyy - HH:mm"); LocalDateTime parsed = LocalDateTime.parse("Nov 03, 2014 - 07:13", formatter); String string = formatter.format(parsed); System.out.println(string); // Nov 03, 2014 - 07:13 java.text.NumberFormat과 달리 새로운 DateTimeFormatter는 변경할 수 없으며 스레드로부터 안전합니다. 형식 작성 구문에 대한 자세한 내용은 여기를 참조하세요 .

주석

Java 8의 주석은 반복 가능합니다. 이것이 어떻게 작동하는지 설명하는 예를 살펴보겠습니다. 시작하려면 유효한 주석 배열을 저장하는 주석 래퍼를 정의하겠습니다. @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8에서는 @Repeatable 주석을 선언하여 동일한 유형의 여러 주석을 사용할 수 있습니다. 옵션 1: 컨테이너 주석 사용(구식)(Java 8에서는 @Repeatable 주석을 선언하여 동일한 유형의 여러 주석을 사용할 수 있습니다 .) 옵션 1: 주석 컨테이너 사용(구식) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} 옵션 2: 반복 가능한 주석 사용( 새로운 기능) @Hint("hint1") @Hint("hint2") class Person {} 옵션 2를 사용하면 Java 컴파일러가 암시적으로 @Hint 주석을 설정합니다. 이는 리플렉션을 통해 주석 정보를 읽는 데 중요합니다. Person 클래스 에 대해 @Hints Hint hint = Person.class.getAnnotation(Hint.class); System.out.println(hint); // null Hints hints1 = Person.class.getAnnotation(Hints.class); System.out.println(hints1.value().length); // 2 Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class); System.out.println(hints2.length); // 2 주석을 선언하지 않았지만 getAnnotation(Hints.class) 메서드를 사용하여 읽을 수 있습니다 . 그러나 더 편리한 방법은 @Hint 주석을 사용하여 모든 주석에 대한 액세스를 제공하는 getAnnotationsByType 입니다 . 또한 Java 8의 주석 사용은 두 가지 목적으로 확장됩니다. @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

이게 다야

내 Java 8 프로그래밍 튜토리얼이 완료되었습니다. JDK 8의 모든 새로운 클래스와 API 기능에 대해 자세히 알아보려면 다음 기사를 읽어보세요. 이는 Arrays.parallelSort , StampedLockCompletableFuture 와 같은 JDK 8의 모든 새로운 클래스와 숨겨진 기능을 이해하는 데 도움이 됩니다 .
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION