到目前为止的故事...
我们厌倦了 Java 的 Date API 普遍不好,最终采用了 Joda Time,它工作得更加理智(尽管它并不完美。)
最近我们注意到 Java 的 NumberFormat 中与阿拉伯语语言环境有关的问题。本质上,它使用“拉丁”数字而不是更自然的“阿拉伯”数字。因此,我一直采用 ICU 格式化程序作为 Java 格式化程序的直接替代品。
现在我注意到 Joda 的日期格式化程序也以拉丁文打印数字。例如,如果您采用以下程序:
import java.util.Date;
import java.util.Locale;
import com.ibm.icu.text.DateFormat;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.junit.Test;
public class TestJoda {
@Test
public void test() {
Locale locale = new Locale("ar", "SA");
DateFormat icuDateFormat = DateFormat.getDateTimeInstance(
DateFormat.LONG, DateFormat.LONG, locale);
System.out.println("ICU: " + icuDateFormat.format(new Date()));
DateTimeFormatter jodaDateTimeFormatter =
DateTimeFormat.longDateTime().withLocale(locale);
System.out.println("Joda: " + jodaDateTimeFormatter.print(DateTime.now()));
}
}
输出如下:
ICU: ٤ أغسطس، ٢٠١٤ ٥:٠٧:١٤ م جرينتش+١٠
Joda: 04 أغسطس, 2014 EST 05:07:14 م
是否有某种方法可以强制 Joda 的格式化程序输出与 ICU 一致的样式?
我想在最坏的情况下会有一种方法来实现某种适配器,但 Joda 类的优点之一是它们的不变性,不幸的是 ICU 迟迟没有采用这一功能。
最佳答案
Joda 仅支持 ASCII 数字,它是硬编码的。
您始终可以使用String.replace
,和/或将DateTimeFormatter
包装到代理中。
关于java - Joda 可以使用阿拉伯数字格式化阿拉伯语言区域的日期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25113504/