2017-02-22 39 views
0

我有2 joda.DateTime s,我用它來創建DurationDuration然後轉換爲Period,雖然兩個日期相隔3年,但Period.getDays,Period.getMonthsPeriod.getYears都返回0.爲什麼?joda期間返回0個月

從斯卡拉REPL例,但應該是很容易理解/轉換成Java(如果需要的話我可以轉換)

import org.joda.time.format.PeriodFormat 
import org.joda.time.{DateTime, Period} 
import org.joda.time.Duration 
import org.joda.time.format.PeriodFormatterBuilder 

scala> val start = DateTime.now 
start: org.joda.time.DateTime = 2017-02-22T16:09:13.131Z 

scala>  val end = start.plusYears(2).plusMinutes(1).plusDays(3) 
end: org.joda.time.DateTime = 2019-02-25T16:10:13.131Z 

scala>  val duration = new Duration(start, end) 
duration: org.joda.time.Duration = PT63331260S 

scala>  duration.getMillis 
res0: Long = 63331260000 

scala>  duration.getStandardDays 
res1: Long = 733 

scala>  duration.getStandardHours 
res2: Long = 17592 

scala>  duration.getStandardMinutes 
res3: Long = 1055521 

scala>  duration.getStandardSeconds 
res4: Long = 63331260 

scala>  val period = duration.toPeriod() 
period: org.joda.time.Period = PT17592H1M 

scala>  period.getDays 
res5: Int = 0 

scala>  period.getHours 
res6: Int = 17592 

scala>  period.getMinutes 
res7: Int = 1 

scala>  period.getSeconds 
res8: Int = 0 

scala>  period.getMillis 
res9: Int = 0 

scala> val formatter = new PeriodFormatterBuilder() 
      .appendMonths().appendSuffix(" month", " months").appendSeparator(" ") 
      .appendDays().appendSuffix(" day", " days").appendSeparator(" ") 
      .appendHours().appendSuffix("h") 
      .appendMinutes().appendSuffix("m") 
      .appendSeconds().appendSuffix("s") 
      .toFormatter 
formatter: org.joda.time.format.PeriodFormatter = [email protected] 

scala>  formatter.print(duration.toPeriod()) 
res10: String = 17592h1m 

scala> PeriodFormat.getDefault.print(duration.toPeriod) 
res11: String = 17592 hours and 1 minute 
+1

'toPeriod'的javadoc說的是什麼? –

回答

3

你打電話AbstractDuration.toPeriod

這個時間轉換爲使用標準時間段類型和ISO年代表的Period實例。

只使用期間類型中的精確字段。因此,只能使用該時段的小時,分​​鍾,秒和毫秒字段。年,月,周和日期字段將不會填充。

A Duration沒有「知道」它的開始和結束點,所以你不能指望像月份這樣的可變長度值被填充。

要獲得startend之間的時期,你應該只使用:

new Period(start, end) 

...可能與PeriodType說你想要的單位。

+0

我無法讀取'.toPeriod'方法的javadoc。此外,從未將數月視爲可變長度,使得總的參議院 – pedrorijo91