web-dev-qa-db-ja.com

文字列までの期間

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

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

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

56
tt

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

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日間に変換しませんでした)。

91
SteveD

デフォルトフォーマッタも使用できます。これはほとんどの場合に適しています。

Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))
22
simao
    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()));
12
Jherico
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    **.appendSuffix(" day", " days")
    .appendSeparator(" and ")
    .appendMinutes()
    .appendSuffix(" minute", " minutes")**
    .appendSeparator(" and ")
    .appendSeconds()
    .appendSuffix(" second", " seconds")
    .toFormatter();

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

2
marucf