2010-04-16 44 views
177

Trong Joda-Time 2, là những gì là sự khác biệt giữa ba loại thời gian kéo dài:Thời gian Joda: sự khác nhau giữa Thời gian, Khoảng thời gian và Thời lượng là gì?

  • Period
  • Interval
  • Duration

    1. Tại sao chúng ta cần ba lớp học?

    2. Cái nào hoạt động tốt hơn?

    3. Tại sao chia một khoảng thời gian hoặc khoảng thời gian hoặc khoảng thời gian không được triển khai? Ví dụ. p = p.divideBy(2);

+2

Lưu ý rằng thuật ngữ ngày giờ này chưa được chuẩn hóa (chưa). Ý tưởng tiêu chuẩn của [ISO-8601] (https://en.wikipedia.org/?title=ISO_8601) của một [thời gian] (https://en.wikipedia.org/?title=ISO_8601#Durations) là những gì Joda -Thời gian xem xét một ['Period'] (http://www.joda.org/joda-time/apidocs/org/joda/time/Period.html). Một đề xuất tiêu chuẩn hóa các thuật ngữ đó đã được nêu ra nhưng chưa hoàn thành. –

Trả lời

225

3 lớp là cần thiết bởi vì họ đại diện cho các khái niệm khác nhau vì vậy nó là một vấn đề chọn một trong những phù hợp cho công việc chứ không phải là thực hiện tương đối. Từ documentation với ý kiến ​​bổ sung của tôi trong nghiêng:


Một khoảng trong Joda thời gian đại diện cho một khoảng thời gian từ một phần nghìn giây nhanh đến tức thời khác. Cả hai instants đều được định nghĩa đầy đủ trong instetime liên tục, hoàn thành với múi giờ. Thời gian cụ thể được xác định, ví dụ: đây có thể là khoảng thời gian từ 20: 00: 00GMT hôm qua và 09: 00: 00GMT sáng nay.

Thời lượng trong thời gian Joda đại diện cho khoảng thời gian tính bằng mili giây. Thời gian thường thu được từ một khoảng thời gian. tức là chúng ta có thể trừ bắt đầu từ cuối một khoảng thời gian để lấy được một thời gian

Một thời gian trong Joda thời gian đại diện cho một khoảng thời gian xác định theo lĩnh vực, ví dụ, 3 năm 5 tháng 2 ngày và 7 giờ. Điều này khác với thời lượng ở chỗ nó không chính xác về mili giây. Một khoảng thời gian chỉ có thể được giải quyết với số mili giây chính xác bằng cách xác định ngay lập tức (bao gồm cả niên đại và múi giờ) nó tương ứng với. ví dụ: xem xét giai đoạn 1 năm, nếu chúng ta thêm điều này vào ngày 1 tháng 1, chúng ta sẽ luôn đến vào ngày 1 tháng 1 tới nhưng thời gian sẽ phụ thuộc vào việc năm can thiệp có phải là năm nhuận hay không. Tương tự như vậy nếu chúng ta thêm 1 tháng đến ngày 1 tháng sau đó chúng tôi sẽ đến ngày 1 tháng tiếp theo nhưng thời gian (tính theo mili giây) sẽ khác nhau dựa trên các tháng trong câu hỏi


Đối với câu hỏi 3, Một phương pháp cụ thể để phân chia thời lượng không thực sự cần thiết vì chúng tôi luôn có thể lấy số mili giây từ thời lượng dưới dạng long (sử dụng getMillis()), chia và tạo thời lượng mới (sử dụng new Duration(long duration)).

Chia một khoảng thời gian không thực sự có ý nghĩa thực sự dựa trên định nghĩa của một khoảng thời gian ở trên. ví dụ. nửa tháng là gì? (độ dài của nó sẽ phụ thuộc vào tháng nào).

+1

Tôi nghĩ rằng việc phân chia một khoảng thời gian có ý nghĩa - nửa tháng vẫn là một đơn vị thời gian hợp lệ, nhưng nó đòi hỏi ngày bắt đầu để biết chính xác khoảng thời gian (theo cùng một tháng là khoảng thời gian hợp lệ). – hadley

+8

Jodatime coi một khoảng thời gian là một bộ các trường có giá trị INTEGER, nó không cho phép các giá trị phân số. Đó là phù hợp với sử dụng chung (dân sự). Thực tế không có ai trong cuộc sống chung cho rằng '1 tháng và 10 ngày' chia cho hai là 'nửa tháng và 5 ngày'. Nếu bạn cần phải làm bộ phận đó, bạn có thể muốn đi đến một thời gian (thời gian vật lý). – leonbloy

83

Để thêm vào mikej's answer:

Một Joda-Timethời gian là một khoảng thời gian "vật lý"; ví dụ:

12000 milliseconds < - đây là một thời gian

Một Joda thời gian khoảng thực sự là một cặp khoảnh khắc (bắt đầu ngay lập tức - end ngay lập tức). An tức thì là, một lần nữa, khái niệm "vật lý", một điểm trong dòng thời gian. Ví dụ (chỉ là một ký hiệu có thể):

(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC) < - đây là một khoảng thời gian

Một khoảng, sau đó, có thể được chuyển đổi sang một thời gian , nhưng không phải là ngược lại.

Hãy xem xét hai khoảng thời gian này:

I1=(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)

I2=(2010/3/3 21:00:00.000 UTC ; 2010/3/3 22:00:00.000 UTC)

Là khoảng thời gian, I1I2 là khác nhau, vì cuối cùng điểm khác nhau; nhưng nếu tôi chuyển đổi chúng thành thời lượng, tôi sẽ có cùng một thứ: 3600000 milliseconds.

(Math tương tự: các khoảng [10,12][95,97] là khác nhau khoảng, nhưng họ có cùng chiều dài : "khoảng thời gian dài" bản đồ để thời gian).

Cuối cùng, thời gian là mất hiệu lực của "thời gian dân sự", được biểu thị bằng số tháng, ngày, giờ, v.v ... không phải do chính nó đại diện cho khoảng thời gian "vật lý", do đó nó có thể ' t được chuyển đổi trực tiếp thành thời lượng (tháng có độ dài thay đổi ...).

Câu hỏi trả lời 3: bạn chỉ có thể chia cho hai thời gian thực (thời lượng).

+0

Bốn tháng chia cho hai sẽ là hai tháng. Tại sao không hợp lệ? – hadley

+0

Bạn sẽ tính toán '2 tháng như thế nào; 18 ngày chia cho 3? Bạn không thể có được một định nghĩa nhất quán cho loại hoạt động đó. – leonbloy

+3

Tôi nghĩ rằng bạn có thể có được một định nghĩa nhất quán, nhưng bạn phải suy nghĩ về nó như là 1/3 thời gian của "2 tháng và 18 ngày". Bạn sẽ không thể tìm ra chính xác nó là gì cho đến khi bạn chuyển đổi nó thành một khoảng thời gian. Chỉ vì JODA không hỗ trợ nó không có nghĩa là nó không hợp lệ. – hadley

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