处理PeriodFormat中的Joda Time错误?

时间:2012-04-11 12:43:40

标签: java jodatime

这是我的代码,它揭示了一个Joda Time bug:

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,计算机设置为“澳大利亚英语”作为首选语言。

你可以建议任何简单的解决方法吗?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

另一种解决方案是更新到最新的Joda Time源...根据此错误报告,它现在已修复: http://sourceforge.net/tracker/?func=detail&aid=3471414&group_id=97367&atid=617889