質問

    

この質問にはすでに回答があります:

    
            
  •              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();

時間が足りないのはそのためです。数日後に何時間も追加し、問題を解決しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top