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?
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
@ 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. –
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)'. –