2012-01-15 134 views
2

我試圖使用「millis」構造函數設置我的Period對象並且相應地更新所有相關字段(年,月,周,天,小時,分鐘,秒)Joda時間,毫秒期間

也就是說,使用下面的代碼:

mPeriod = new Period(millis, PeriodType.standard()); 

不填寫相應的所有相關領域。 只有幾個星期和幾分鐘(輸入millis的1325965615539

有人可以幫我把這件事情弄清楚嗎?

回答

1

可以使用Period#normalizedStandard();

但是它正常化,有沒有辦法可以Period「在所有相關領域補」,因爲它不能對天數假設在幾個月或幾年。它能做的最好的就是把它變成幾周,幾天和時間的領域。

在此的Javadoc接觸,但不是很詳細:

如果期間包含年或月,那麼月將 規範化爲介於0和11天的現場及以下根據需要歸一化爲 ,但這個不會溢出到 個月字段。因此,1年15個月的時間將正常化爲3個月的2 年。但是1個月40天的期限將保持爲1個月,40天內爲 。

(重點煤礦)

如果你需要它歸到年和月,你需要構建Period與這些字段的值。

或者,你可以使用一個Duration

  1. 構建Duration以毫秒
  2. 使用Duration#toPeriodFrom(ReadableInstant)在給定的時間瞬間打造Period開始(例如新DateTime())。根據該文檔,這應該工作:

    這種轉換將決定一個時期的領域準確。 結果基於瞬時毫秒,瞬時的時間順序,標準週期類型和此持續時間的長度。


這裏是normalize()應該做你的毫秒輸入:

import org.joda.time.Period; 

class Normalize { 
     public static void main(String[] args) { 
       Period period = new Period(1325965615539L); 
       System.out.println(period); 
       System.out.println(period.normalizedStandard()); 
     } 
} 

// outputs 
PT368323H46M55.539S 
P2192W2DT19H46M55.539S 

通知第二條線被歸,但最多隻能到幾周。

+0

正常化沒有任何效果,它沒有做任何事情...... – Droritos 2012-01-15 19:45:46

+0

@DrorWeiss - 它可能有效果,但可能不是你所期待的。我更新了我的答案,以澄清原因。 – 2012-01-15 19:57:37