2017-02-22 6 views
0

私はDurationを作成するために使用する2 joda.DateTimeを持っています。 DurationPeriodに変換され、2つの日付は3年離れていますが、Period.getDays,Period.getMonths、およびPeriod.getYearsはすべて0を返します。なぜですか?あなたはAbstractDuration.toPeriodを呼んでいるjoda期間は0か月を返します

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

ScalaのREPLから

が、簡単にする必要がありますが(必要であれば、私は変換することができます)は、Javaに変換/理解する:

は、この期間を変換します標準期間タイプとISO年表を使用する期間インスタンス。

期間タイプの正確なフィールドのみが使用されます。したがって、期間の時、分、秒、およびミリ秒フィールドのみが使用されます。年、月、週、および日のフィールドは入力されません。

Durationは、開始点と終了点を「認識」していないため、月などの可変長の値を入力することはできません。

startend間の期間を取得するには、あなただけを使用する必要があります

new Period(start, end) 

...おそらくあなたが望むどの単位言うことPeriodTypeで。

+0

私は '.toPeriod'メソッドのjavadocを読んでいません。また、可変長として何ヶ月も考えたことがなく、 – pedrorijo91

関連する問題