这是我的代码,它揭示了一个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,计算机设置为“澳大利亚英语”作为首选语言。
你可以建议任何简单的解决方法吗?
答案 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