java - Joda 可以使用阿拉伯数字格式化阿拉伯语言区域的日期吗?

标签 java internationalization jodatime icu

到目前为止的故事...

我们厌倦了 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/

相关文章:

Java DateFormat 格式和解析给出了意想不到的结果

java - IBM RAD 8 中的 JSPF 验证是否被破坏?

c# - 按类别筛选 Outlook 约会

javascript - 如何将 ANTD 表文本更改为不同语言

java - 将字符串转换为 JSONObject 时出现解析错误

java - 不同队列的多个监听器 - Spring Rabbit

java - SimpleDateFormat 的奇怪行为

java - 解析 joda-time

java - Joda-Time 中两个日期之间的天数

java - Joda-Time 时区偏移 10 小时