Javaで Joda-Time ライブラリを使用しています。 Periodオブジェクトを「x日、x時間、x分」の形式の文字列に変換しようとすると、多少の困難が生じます。
これらのPeriodオブジェクトは、最初に秒数を追加することによって作成されます(秒としてXMLにシリアル化され、それらから再作成されます)。単にgetHours()などのメソッドを使用する場合、取得されるのはゼロで、getSecondsでtotal秒数になります。
Jodaに、日、時間などの各フィールドの秒を計算させるにはどうすればよいですか?
期間を正規化する必要があります。合計秒数で構成する場合、それが唯一の値であるためです。正規化すると、合計日数、分数、秒数などに分類されます。
ripper234による編集- TL; DRバージョン :PeriodFormat.getDefault().print(period)
の追加
例えば:
public static void main(String[] args) {
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
.appendDays()
.appendSuffix(" day", " days")
.appendSeparator(" and ")
.appendMinutes()
.appendSuffix(" minute", " minutes")
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();
Period period = new Period(72, 24, 12, 0);
System.out.println(daysHoursMinutes.print(period));
System.out.println(daysHoursMinutes.print(period.normalizedStandard()));
}
印刷されます:
24分12秒
3日24分12秒
したがって、正規化されていない期間の出力は、単に時間数を無視していることがわかります(72時間を3日間に変換しませんでした)。
デフォルトフォーマッタも使用できます。これはほとんどの場合に適しています。
Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))
Period period = new Period();
// prints 00:00:00
System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
period = period.plusSeconds(60 * 60 * 12);
// prints 00:00:43200
System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
period = period.normalizedStandard();
// prints 12:00:00
System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
.appendDays()
**.appendSuffix(" day", " days")
.appendSeparator(" and ")
.appendMinutes()
.appendSuffix(" minute", " minutes")**
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix(" second", " seconds")
.toFormatter();
あなたは時間を逃している、それが理由です。何日も後に追加し、問題を解決しました。