3

Joda Time のバグを明らかにする私のコードは次のとおりです。

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

import java.util.Locale;

public class ScratchSpace {

    public static void main(String[] args) {
        Locale.setDefault(Locale.GERMAN);
        final PeriodFormatter periodFormatter = 
                 PeriodFormat.wordBased(Locale.ENGLISH);
        final Period period = new Period(6, 5, 4, 3);
        final String s = period.toString(periodFormatter);
        // i'm expecting english to be outputted
        System.out.println("s = " + s); // outputs german: 6 Stunden, 5 Minuten, 4 Sekunden und 3 Millisekunden
    }

}

JavaDocs によると、英語で書式設定された期間を取得する必要があります。ただし、代わりに現在のデフォルトのロケールを使用しています。上記の例ではドイツ語です。

私は Mac OS X 10.7 で Joda Time 2.0 を使用しており、コンピューターの優先言語を「オーストラリア英語」に設定しています。

あなたが提案できる簡単な回避策はありますか?

4

2 に答える 2

1

別の解決策は、最新の Joda Time ソースに更新することです...このバグ レポートによると、現在は修正されています: http://sourceforge.net/tracker/?func=detail&aid=3471414&group_id=97367&atid=617889

于 2012-04-16T11:08:54.197 に答える
1

さて、私は回避策を見つけました:

final PeriodFormatter periodFormatter = 
             PeriodFormat.wordBased(new Locale(""));

ただし、PeriodFormat には明らかにバグがあります。たとえば、PeriodFormat.getDefault() の JavaDocs には次のように記載されています。

Gets the default formatter that outputs words in English.
 This calls {@link #wordBased(Locale)} using a locale of {@code ENGLISH}.

一方、私にとっての結果は、これを実行すると、代わりにユーザーの現在のロケールが使用されることです。

final PeriodFormatter periodFormatter = PeriodFormat.getDefault();
于 2012-04-11T12:58:01.577 に答える