2016-02-02 12 views
7

Trong java.time khuôn khổ Java 8 và sau đó, lớp Duration nói:Thời gian không hỗ trợ NGÀY trái với tài liệu hướng dẫn lớp

Lớp này mô hình một số lượng hoặc số lượng thời gian về giây và nano giây. Nó có thể được truy cập bằng cách sử dụng các đơn vị dựa trên thời gian khác, chẳng hạn như phút và giờ. Ngoài ra, đơn vị DAYS có thể được sử dụng và được xử lý chính xác bằng 24 giờ, do đó bỏ qua các hiệu ứng tiết kiệm ánh sáng ban ngày.

Tuy nhiên, khi tôi gọi phương thức get và vượt qua ChronoUnit.DAYS, một ngoại lệ được ném.

LocalTime start = LocalTime.of (0 , 0 , 0); // First moment of the day. 
LocalTime stop = LocalTime.of (2 , 0 , 0); // 2 AM. 

Duration duration = Duration.between (start , stop); 
long days = duration.get (ChronoUnit.DAYS); 

ngoại lệ trong chủ đề java.time.temporal.UnsupportedTemporalTypeException "chính": đơn vị được hỗ trợ: Ngày

Tôi có hiểu lầm gì đó, hoặc lạm dụng các lớp học?

+0

Theo như tôi nhớ chỉ '' ChronoUnit'' hằng số mà làm việc trong '' Duration.get (...) '' là '' SECONDS'' và '' NANOS'' nhưng tôi không bao giờ phát hiện ra lý do tại sao. – f1sh

+1

@ f1sh Tại sao? Đó là vì trạng thái bên trong của 'Thời lượng' chỉ giữ giây và nano giây. Phương thức 'get (TemporalField)' được thiết kế để mang lại một lượng ** ** một phần theo trạng thái bên trong. Ngược lại, 'toDays()' cố gắng xác định số tiền ** toàn bộ ** được chuyển đổi thành ngày trên cơ sở 1d = 24h. –

+0

Tôi có lỗi đánh máy trong nhận xét trước. Thay vì nói 'get (TemporalField)' tôi muốn nói: 'get (TemporalUnit)'. –

Trả lời

2

Phương pháp get(TemporalUnit) không may gây nhầm lẫn và không dành cho hầu hết người dùng. Để hiểu lý do, hãy xem this answer.

Java SE 9 sẽ bao gồm nhiều phương thức truy cập phong phú hơn cho Duration. Hiện tại, bạn có thể sử dụng toDays() để nhận tổng số ngày.

Javadoc không chính xác sai, nhưng có thể không hoàn toàn hữu ích. Lớp học có một số hỗ trợ trong 24 ngày trong toDays(), ofDays(), plusDays() v.v. Chỉ là phương pháp get(TemporalUnit) được đặt tên rất sai (phải là internalGet(TemporalUnit) hoặc một số tên như vậy).

6

Tài liệu cho get trên lớp Thời lượng.

Lấy giá trị của đơn vị được yêu cầu. Điều này trả về một giá trị cho mỗi đơn vị được hỗ trợ, SECONDS và NANOS. Tất cả các đơn vị khác ném một ngoại lệ.

Tuy nhiên, lớp Duration có một phương pháp gọi là toDays:

Gets số ngày trong thời gian này. Điều này trả về tổng số ngày trong khoảng thời gian bằng cách chia số giây cho 86400. Điều này dựa trên định nghĩa chuẩn của một ngày là 24 giờ.

+0

Vì vậy tài liệu về lớp học bị lỗi và tôi nên gửi báo cáo lỗi? –

+0

@BasilBourque Tôi không nghĩ đây là lỗi, nhưng có thể là một tài liệu hơi khó hiểu.Mô tả lớp tổng thể chỉ đưa ra một bản tóm tắt. Tôi muốn xem xét các mô tả phương pháp để vượt trội hơn tóm tắt tổng thể. Nó không rõ ràng nói * where * bạn có thể sử dụng 'DAYS', nhưng nếu bạn đọc một số phương thức khác (như' trừ') bạn có thể sử dụng 'DAYS' trong những trường hợp đó. – kunruh

+0

Tôi đã chi tiêu báo giá tài liệu. Chắc chắn dường như với tôi rằng chúng ta sẽ có thể nhận được một số ngày. –

Các vấn đề liên quan