質問
この質問にはすでに回答があります:
- JodaTimeの継続時間を文字列に変換 2つの答え
Javaで Joda-Time ライブラリを使用しています。期間オブジェクトを「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 minutes and 12 seconds
3 days and 24 minutes and 12 seconds
したがって、正規化されていない期間の出力は、単に時間数を無視していることがわかります(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();
時間が足りないのはそのためです。数日後に何時間も追加し、問題を解決しました。
所属していません StackOverflow