2012-04-01 4 views
1

入力時間がゼロの場合はJodaプリントの "0 seconds"を表示しようとしていますが、その代わりに何も印刷しません。Joda PrintZeroRarelyFirst not working

以下の例では、空の文字列を出力しています。何が起きてる?

PeriodFormatter hoursMinutesSeconds = new PeriodFormatterBuilder() 
    .appendHours().appendSuffix(" hour", " hours") 
    .appendSeparator(", ", " and ") 
    .appendMinutes() 
    .appendSuffix(" minute", " minutes") 
    .appendSeparator(" and ") 
    .printZeroRarelyFirst() 
    .appendSeconds() 
    .appendSuffix(" second", " seconds") 
    .toFormatter(); 

System.out.println(hoursMinutesSeconds.print(new Period(0, 0, 0, 500))); 
+0

を好む 'printZeroRarelyLast()' –

答えて

3

あなたは早期printZeroAlwaysを必要とし、それが0 hoursを言うために動作させるためにビットまでごprintZeroRarelyFirstを移動します。上記の方法は、常にあなたの0時間を与えるので

import org.joda.time.Period; 
import org.joda.time.format.PeriodFormatter; 
import org.joda.time.format.PeriodFormatterBuilder; 

public class TestFormat { 

    public static void main(String[] args) { 
    PeriodFormatter hoursMinutesSeconds = new PeriodFormatterBuilder() 
    .printZeroAlways() 
    .appendHours().appendSuffix(" hour", " hours") 
    .printZeroRarelyFirst() 
    .appendSeparator(", ", " and ") 
    .appendMinutes() 
    .appendSuffix(" minute", " minutes") 
    .appendSeparator(" and ") 
    .appendSeconds() 
    .appendSuffix(" second", " seconds") 
    .toFormatter(); 
    System.out.println(hoursMinutesSeconds.print(new Period(0, 0, 0, 0))); 
    } 
} 

あなたは、しかし、printZeroRarelyLastソリューションを好むかもしれません。

が、私はそれはで動作します

public static void main(String[] args) { 
    PeriodFormatter hoursMinutesSeconds = new PeriodFormatterBuilder() 
    .printZeroRarelyLast() 
    .appendHours().appendSuffix(" hour", " hours") 
    .appendSeparator(", ", " and ") 
    .appendMinutes() 
    .appendSuffix(" minute", " minutes") 
    .appendSeparator(" and ") 
    .appendSeconds() 
    .appendSuffix(" second", " seconds") 
    .toFormatter(); 
    System.out.println(hoursMinutesSeconds.print(new Period(0, 0, 0, 0))); 
} 
+0

は、実際に私はそれを「0秒」を印刷したい、と私は、私は少し例を台無しだと思うけれども。私はそれを編集します。 'new Period(0,0,0,500)' – Telanor

+0

ああ、今は良い質問です。 Periodオブジェクトを最も近い秒に丸めることができます(または、オリジナルのように新しいPeriodオブジェクトを生成し、最も近い秒に四捨五入します)。 –

+0

ジョーダにはその機能がありますか?あるいは、私は '新しい期間(時間/ 1000 * 1000)'をしなければならないのですか? (私の実際の入力は長い間) – Telanor