2010-04-16 128 views
177

Joda-Time 2,什麼是三種時間之間的差異跨越:Joda-Time:週期,時間間隔和持續時間有什麼區別?

  • Period
  • Interval
  • Duration

    1. 爲什麼我們需要三個類?

    2. 哪一個表現更好?

    3. 爲什麼 Period or Duration或Interval instance not implemented?例如。需要p = p.divideBy(2);

+2

請注意,此日期時間術語尚未標準化(尚未)。 [ISO-8601](https://en.wikipedia.org/?title=ISO_8601)標準的[duration](https://en.wikipedia.org/?title=ISO_8601#Durations)是Joda - 時間考慮[[期間]](http://www.joda.org/joda-time/apidocs/org/joda/time/Period.html)。提出了將這些術語標準化的建議,但尚未完成。 – 2015-07-02 22:16:40

回答

225

3類,因爲它們代表着不同的概念,所以它是選擇一個合適的工作,而不是相對錶現的問題。從documentation與我斜體添加評論:


在喬達時間的間隔代表的時間從一個毫秒瞬間到另一個瞬間的時間間隔。這兩個時刻都是在日期時間連續體中完全指定的時刻,並且包含時區。 具體時間被定義爲例如這可能是昨天20:00:00GMT和今天早上9:00:00GMT之間的時間間隔。

A 持續時間 Joda-Time表示以毫秒爲單位測量的持續時間。持續時間通常從間隔獲得。 即,我們可以減去從一個間隔的結束開始到導出的持續時間

期間在約達時間表示一段時間中的字段來定義,例如,3年5個月2天和7小時。這與持續時間不同,因爲它在毫秒方面不準確。只能通過指定與其相關的時刻(包括時間順序和時區)才能將時間段解析爲精確的毫秒數。 例如考慮一年的時間,如果我們在1月1日加上這個時間,我們將一直到明年1月1日,但時間長短取決於干預年份是否爲閏年。同樣,如果WE 1個月添加到本月1日起,然後我們會在接下來的一個月,但持續時間(毫秒)的第一個抵達基於有關


問題3月份會有所不同,劃分持續時間的具體方法並不是真的需要,因爲我們始終可以從持續時間中獲取毫秒數long(使用getMillis()),將其分開並構建新的持續時間(使用new Duration(long duration))。

基於上述時間段的定義,劃分句點並沒有真正的意義。例如半個月是什麼? (其長度取決於哪個月)。

+1

我認爲劃分一個時期確實有意義 - 半個月仍然是一個有效的時間單位,但它需要一個開始日期來確切地知道多久(以與一個月的有效期完全相同的方式)。 – hadley 2011-05-07 13:21:30

+8

Jodatime認爲一段時間是INTEGER值域的元組,它不允許小數值。這與常見(民用)使用一致。實際上,平凡生活中沒有人認爲'1個月和10天'除以2是'半個月和5天'。如果你需要做這個部門,你可能想要去一個持續時間(物理時間)。 – leonbloy 2011-05-07 13:58:17

83

要添加到mikej's answer

Joda-Time持續時間是 「物理」 的時間間隔;例如:

12000 milliseconds < - 這是一個持續時間

甲約達時間間隔實際上是一對時刻(啓動即時 - 結束時刻)。 即時又是一個「物理」概念,即時間軸上的一個點。例如(只是一個可能的符號):

(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC) < - 這是一個間隔

一種間隔,然後,可以被轉換爲一個持續時間,但不是相反。

考慮以下兩個間隔:

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)

作爲間隔,I1I2是不同的,這是因爲終端點是不同的;但如果我將它們轉換爲持續時間,我會得到同樣的結果:3600000 milliseconds

(數學式類比:間隔[10,12][95,97]不同間隔,但它們具有相同的長度「間隔長度」映射到持續時間)。

最後,期間是「民事時間」的失效,表示爲月,日,小時等的數量。它本身並不代表「物理」區間,因此它可以「 t直接轉換爲持續時間(月有可變長度...)。

這回答問題3:你只能分兩個物理時間(持續時間)。

+0

四個月除以二將是兩個月。爲什麼不是有效的? – hadley 2011-05-07 13:22:31

+0

你會如何計算'2個月; 18天除以3?你不能得到一個一致的定義,這種操作。 – leonbloy 2011-05-07 13:40:50

+3

我認爲你可以得到一個一致的定義,但是你必須把它想成「2個月和18天」的1/3。除非將其轉換爲間隔,否則無法準確確定其內容。僅僅因爲JODA不支持它並不意味着它是無效的。 – hadley 2011-05-07 16:19:30