2 つの日付 (ミリ秒単位) を受け取り、これら 2 つの日付の間の期間を示す文を返すメソッドを作成しました。
今のところ、私はこのコードを持っています:
public static String formatDuration(long start, long end) {
Interval interval = new Interval(start, end);
return getPeriodFormatter().print(interval.toPeriod()).trim();
}
private static PeriodFormatter getPeriodFormatter() {
PeriodFormatter pf = new PeriodFormatterBuilder().printZeroRarelyFirst()
.appendYears().appendSuffix("y ", "y ")
.appendMonths().appendSuffix("m" , "m ")
.appendDays().appendSuffix("d ", "d ")
.appendHours().appendSuffix("h ", "h ")
.appendMinutes().appendSuffix("m ", "m ")
.appendSeconds().appendSuffix("s ", "s ")
.toFormatter();
return pf;
}
ただし、JodaTime で間隔を定義する必要がある方法を誤解していると思います。次のテストコードを試してみると:
@Test
public void foobar() {
try {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy");
long start = sdf.parse("10:30:00 24/06/2009").getTime();
long end = sdf.parse("23:05:17 22/08/2009").getTime();
System.out.println("Duration: " + formatDuration(start, end));
} catch (Exception e) {
e.printStackTrace();
fail("Could not test duration.");
}
}
次の出力が得られますが、これは間違っています (特に日の部分で)。
Duration: 1m 1d 12h 35m 17s
JodaTime で正しい期間を定義するにはどうすればよいですか?
実際、私が忘れていたのPeriodFormatter
は、週を追加することです。したがって、週を追加すると、次の正しい出力が得られます。
Duration: 1m 4w 1d 12h 35m 17s
だから私の質問は少し変わります:週+日の代わりに月の日数を表示する方法はありますか? 言い換えれば、代わりに:
Duration: 1m 4w 1d 12h 35m 17s
私がしたい:
Duration: 1m 29d 12h 35m 17s