2009-03-18 42 views
7

Tôi quen thuộc với các lớp ngày tháng và thời gian trong JDK và các phương thức định dạng liên quan của chúng. Tôi có thể bị mù, nhưng tôi không thể tìm thấy một tập hợp các lớp tương đương cho các khoảng thời gian xử lý. Ví dụ: tôi muốn hiển thị số ngày cho một giá trị dài nhất định là mili giây. Tôi nhận ra rằng phương pháp để thực hiện các chuyển đổi này khá đơn giản, tuy nhiên khi bạn yếu tố quốc tế hóa và hỗ trợ nội địa hóa thì điều này trở nên ít tầm thường hơn.Có cách nào dễ dàng để Tính toán và định dạng khoảng thời gian/ngày trong java?

Tôi rất ngạc nhiên khi JDK thiếu hỗ trợ xử lý khoảng thời gian. Tuy nhiên, các cơ sở dữ liệu như Postgresql hỗ trợ nó.

Về cơ bản những gì tôi đang tìm kiếm trong JDK (nếu tôi quá mù để xem nó) hoặc trong một thư viện của bên thứ ba là các chức năng sau:

  • phương pháp tính toán thời gian. Chẳng hạn như mili giây đến vài tuần hoặc vài giây đến nano giây. Mặc dù toán học là đơn giản cho các hoạt động này, việc có một API để trải qua có vẻ tự tài liệu hơn cho tôi.
  • Chức năng định dạng khoảng thời gian định dạng theo Miền địa phương được truyền như DateFormat hoạt động. Ví dụ, trong EN_US tôi giả định rằng 10 ngày là tốt "10 ngày" và bằng tiếng Nhật, tôi muốn "10" trở lại.

Có điều gì ngoài đó hoặc đây có phải là sự canidate cho một dự án mã nguồn mở mới không?

Trả lời

9

Bạn đã thử Joda Time?

+0

+1 Thời gian Joda trông khá tuyệt vời. Nó có xử lý khoảng thời gian ngoài hỗ trợ lịch địa phương tốt. – Elijah

+1

Điều này đang trở thành gần như một sáo rỗng. (Xem các nhận xét trên http://stackoverflow.com/questions/635935/how-can-i-calculate-a-time-span-in-java-and-format-the-output và http://stackoverflow.com/câu hỏi/643402/đơn giản-java-ngày-tính toán, và có lẽ mọi câu hỏi trong phần "liên quan".) –

+0

Có lẽ điều này nên nói với các nhà phát triển java một cái gì đó về một thiếu sót rõ ràng trong jdk. Hey - các bạn nghe không? – Elijah

3

có một cái nhìn tại http://commons.apache.org/ và lớp DateUtils có

+0

Dự án đó thuộc loại dự án nào? – Elijah

+0

+1 OK. Nó nằm trong gói lang. Rất vui khi biết điều đó là có kể từ khi tôi đã nhập khẩu lang trong dự án hiện tại của tôi. – Elijah

0

Thật không may là không có gì giống như thế này trong Thư viện chuẩn, nhưng như Tobiask chỉ ra Apache Commons có một công cụ hữu ích cho việc này.

DurationFormatUtils có một vài định dạng được xác định trước (Giờ: Phút: Thứ hai, ISO) và cho phép bạn chỉ định định dạng của riêng mình.

1

tl; dr

Duration.ofMillis(yourMillisecondsLongNumberGoesHere) 
     .toDays() 

Sử dụng java.time

Các lớp ngày thời gian cũ phiền hà đã được thay thế bởi các lớp java.time.

Tôi muốn hiển thị số ngày cho một giá trị dài nhất định mili giây

Đối với một khoảng thời gian liên quan đến giờ, phút và giây (và ngày định nghĩa là khối 24-giờ), sử dụng lớp Duration.

Duration d = Duration.ofMillis(yourMillisecondsLongNumberGoesHere); 

Để nhận số ngày, được xác định bằng cách xác định tổng số giây là 86,400L, hãy gọi toDays.

long days = d.toDays(); 

Về java.time

Khung java.time được xây dựng vào Java 8 và sau đó.Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date, Calendar, & SimpleDateFormat.

Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp java.time.

Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310.

Nơi lấy các lớp java.time?

Dự án mở rộng ThreeTen-Extra java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval, YearWeek, YearQuartermore.

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