57

私はJavaでJoda-Timeライブラリを使用しています。Periodオブジェクトを「x日、x時間、x分」の形式の文字列に変換しようとすると問題が発生します。

これらのPeriodオブジェクトは、最初に秒数を追加することによって作成されます(秒としてXMLにシリアル化されてから、それらから再作成されます)。単にgetHours()などのメソッドを使用すると、取得できるのはゼロで、getSecondsを使用した合計秒数です。

Jodaに、日、時間などのそれぞれのフィールドの秒を計算させるにはどうすればよいですか?

4

4 に答える 4

92

合計秒数で作成すると、それが唯一の値になるため、期間を正規化する必要があります。正規化すると、合計日数、分、秒などに分解されます。

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 日に変換されていません)。

于 2009-09-17T19:11:23.477 に答える
23

ほとんどの場合に適した Default フォーマッタを使用することもできます。

Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))
于 2011-02-01T12:18:27.603 に答える
12
    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()));
于 2009-09-17T18:40:35.847 に答える
2
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    **.appendSuffix(" day", " days")
    .appendSeparator(" and ")
    .appendMinutes()
    .appendSuffix(" minute", " minutes")**
    .appendSeparator(" and ")
    .appendSeconds()
    .appendSuffix(" second", " seconds")
    .toFormatter();

あなたは時間を逃しています、それが理由です。何日も何時間も追加し、問題を解決します。

于 2012-02-13T17:07:42.303 に答える