Khuyến mãi
Đại học Java
Học hỏi
Các khóa học
nhiệm vụ
Khảo sát & Trắc nghiệm
Trò chơi
Giúp đỡ
Lịch trình
Kỳ thực tập
Cộng đồng
người dùng
Diễn đàn
Trò chuyện
Bài viết
Câu chuyện thành công
Hoạt động
Nhận xét
đăng ký
chủ đề ánh sáng
Bài báo
  • Nhận xét
  • Về chúng tôi
  • CS50
Bắt đầu
Bắt đầu học
  • Bài viết
  • Tác giả
  • Tất cả các nhóm
  • Tất cả danh sách bài viết
JavaRush /Blog Java /Random-VI /Hướng dẫn Java 8. Phần 2.
ramhead
Mức độ
  • 28 February 2021
  • 454 views
  • 0 comments

Hướng dẫn Java 8. Phần 2.

Xuất bản trong nhóm
Frontend-университет

API ngày

Java 8 chứa các API ngày và giờ hoàn toàn mới trong gói java.time. API ngày mới có thể so sánh với thư viện Joda-Time , tuy nhiên nó không giống nhau. Các ví dụ sau sẽ đề cập đến những phần quan trọng nhất của API mới.
Cái đồng hồ
Đồng hồ cho phép truy cập vào ngày và giờ hiện tại. Đồng hồ nhận biết được múi giờ và do đó có thể được sử dụng thay cho System.currentTimeMillis() để trả về thời gian hiện tại tính bằng mili giây. Loại độ chính xác về thời gian này cũng được thể hiện bằng lớp Instant . Instant có thể được sử dụng để tạo các đối tượng java.util.Date được kế thừa . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
Múi giờ
Múi giờ được biểu thị bằng lớp trừu tượng ZoneId . Chúng có thể được truy cập dễ dàng bằng cách sử dụng các phương pháp thống kê của nhà máy. Múi giờ xác định độ lệch quan trọng để chuyển đổi giữa ngày và giờ tức thời và địa phương. 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]
Giờ địa phương
LocalTime hiển thị thời gian không có múi giờ, ví dụ 17:30:15. Ví dụ sau tạo hai đối tượng giờ địa phương cho các múi giờ được xác định ở trên. Sau đó, chúng tôi so sánh hai đối tượng và tính toán sự khác biệt về số giờ và số phút giữa chúng. 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 đi kèm với nhiều phương thức xuất xưởng khác nhau để giúp việc khởi tạo dễ dàng hơn, bao gồm cả phân tích cú pháp chuỗi. 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
Ngày địa phương
LocalDate hiển thị một ngày cụ thể, ví dụ 2014-03-11. Các phiên bản là bất biến và hoạt động tương tự như LocalTime. Ví dụ này minh họa cách tính ngày mới bằng cách cộng hoặc trừ ngày, tháng hoặc năm. Hãy nhớ rằng mọi thao tác trên một đối tượng đều trả về một đối tượng mới. 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 Phân tích cú pháp LocalDate từ một chuỗi cũng đơn giản như phân tích cú pháp 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
Ngày giờ địa phương
LocalDateTime hiển thị ngày giờ. Đây là sự kết hợp của ngày và giờ nêu trên trong một bản sao. Các phiên bản LocalDateTime là bất biến và hoạt động tương tự như LocalTime và LocalDate. Chúng ta có thể sử dụng các phương thức để truy xuất các giá trị thuộc tính phiên bản mà chúng ta cần: 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 Cùng với thông tin múi giờ bổ sung, phiên bản có thể được chuyển đổi thành tức thì. Instant có thể dễ dàng chuyển đổi sang các kiểu cũ kế thừa từ 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 Định dạng ngày giờ hoạt động giống như định dạng ngày hoặc giờ. Thay vì sử dụng các định dạng ngày được xác định trước, chúng ta có thể sử dụng các định dạng được xác định thủ công. 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 Không giống như java.text.NumberFormat, DateTimeFormatter mới là bất biến và an toàn cho luồng. Để biết thêm thông tin về cú pháp viết định dạng, hãy đọc tại đây .

Chú thích

Chú thích trong Java 8 có thể lặp lại. Hãy xem một ví dụ để minh họa cách thức hoạt động của nó. Để bắt đầu, chúng ta sẽ định nghĩa một trình bao bọc chú thích để lưu trữ một loạt các chú thích hợp lệ: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 cho phép chúng ta sử dụng nhiều chú thích cùng loại bằng cách khai báo chú thích @Repeatable. Tùy chọn 1: Sử dụng chú thích vùng chứa (trường học cũ) (Java 8 cho phép chúng ta sử dụng nhiều chú thích cùng loại bằng cách khai báo chú thích @Repeatable .) Tùy chọn 1: Sử dụng vùng chứa chú thích (trường học cũ) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} Tùy chọn 2: Sử dụng các chú thích lặp lại ( tính năng mới) @Hint("hint1") @Hint("hint2") class Person {} Bằng cách sử dụng tùy chọn hai, trình biên dịch java sẽ ngầm đặt chú thích @Hint. Điều này rất quan trọng để đọc thông tin chú thích thông qua sự phản chiếu. 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 Mặc dù chúng ta chưa khai báo chú thích @Hints cho lớp Person nhưng nó có thể được đọc bằng phương thức getAnnotation(Hints.class) . Tuy nhiên, một phương pháp thuận tiện hơn là getAnnotationsByType , cung cấp quyền truy cập vào tất cả các chú thích bằng cách sử dụng chú thích @Hint . Ngoài ra, việc sử dụng các chú thích trong Java 8 còn mở rộng sang hai mục đích: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

Đây là tất cả

Hướng dẫn lập trình Java 8 của tôi đã hoàn tất. Nếu bạn muốn tìm hiểu thêm về tất cả các lớp và tính năng API mới trong JDK 8, hãy đọc bài viết tiếp theo của tôi. Điều này sẽ giúp bạn hiểu tất cả các lớp mới và các tính năng ẩn trong JDK 8, chẳng hạn như Arrays.parallelSort , StampedLock và CompletableFuture .
Java-университет
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Học hỏi
  • Курси програмування
  • Sự đăng ký
  • Khóa học Java
  • Trợ giúp với Nhiệm vụ
  • định giá
  • dự án trò chơi
Cộng đồng
  • người dùng
  • Bài viết
  • Diễn đàn
  • Trò chuyện
  • Câu chuyện thành công
  • Hoạt động
Công ty
  • Về chúng tôi
  • Liên lạc
  • Nhận xét
  • Câu hỏi thường gặp
  • Ủng hộ
JavaRush JavaRush là một khóa học trực tuyến để học lập trình Java từ đầu. Khóa học này là một cách hoàn hảo để thành thạo Java cho người mới bắt đầu. Nó chứa hơn 1200 tác vụ với khả năng xác minh ngay lập tức và một phạm vi thiết yếu của lý thuyết cơ bản về Java. Để giúp bạn thành công trong học tập, chúng tôi đã triển khai một tập hợp các tính năng tạo động lực: câu đố, dự án viết mã, nội dung về cách học hiệu quả và sự nghiệp của nhà phát triển Java.
Theo chúng tôi
Lập trình viên được tạo ra, không được sinh ra © 2025 JavaRush
Tải ứng dụng
  • Google Play
  • App Store
Mastercard Visa
Lập trình viên được tạo ra, không được sinh ra © 2025 JavaRush