代码之家  ›  专栏  ›  技术社区  ›  Sana'a Ala'a

如何将日期从英语转换为阿拉伯语

  •  3
  • Sana'a Ala'a  · 技术社区  · 6 年前

    我有这个密码

    frame.sigdate.setText(new SimpleDateFormat("yyyy/M/d").format(new Date()));
    

    它用英文数字从我的电脑上读取日期。我想做的是将日期转换为阿拉伯数字。 有类似的吗 Local.ar ? 我感谢你的帮助。

    4 回复  |  直到 6 年前
        1
  •  7
  •   Anonymous    6 年前

    JAVA时间

        Locale arabicLocale = Locale.forLanguageTag("ar");
        DateTimeFormatter arabicDateFormatter
                = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
                        .withLocale(arabicLocale)
                        .withDecimalStyle(DecimalStyle.of(arabicLocale));
        LocalDate today = LocalDate.now(ZoneId.of("Asia/Muscat"));
        System.out.println(today.format(arabicDateFormatter));
    

    输出:

    第七条

    关键是 withDecimalStyle 。如果没有此调用,格式化程序仍将使用西方数字,如 15‏/4‏/2018 。您可能希望使用更具体的语言标记,而不仅仅是 ar 例如阿拉伯语 ar-BH 巴林或 ar-YE 也门。有关可能性,请参见底部的链接。您还应该在我放置亚洲/马斯喀特的地方插入所需的时区。

    编辑: 以上内容已经在Java 9中进行了测试。令人惊讶的是,在Java 8中,它仍然使用西方(未本地化)数字。一个可能的修复方法(或变通方法,如果您愿意)是明确指定零位,它将从中拾取其他数字。

        DecimalStyle arabicDecimalStyle
                = DecimalStyle.of(arabicLocale).withZeroDigit('Ù ');
        DateTimeFormatter arabicDateFormatter
                = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
                        .withLocale(arabicLocale)
                        .withDecimalStyle(arabicDecimalStyle);
    

    在论点to的两个撇号之间是一个阿拉伯零 withZeroDigit .现在我在Java 8上得到了以下输出:

    第七条

    像我这样使用内置的特定于语言环境的格式通常是个好主意 ofLocalizedDate 在上面的两个片段中。如果需要更好地控制格式,请使用 ofPattern 相反例如,要获取yyyy/mm/dd格式:

        DateTimeFormatter arabicDateFormatter
                = DateTimeFormatter.ofPattern("uuuu/MM/dd", arabicLocale)
                        .withDecimalStyle(arabicDecimalStyle);
    

    输出:

    七、七、七

    格式从Java 8更改为Java 9的原因是Java更改了语言环境数据来源的默认值,包括内置的本地化日期和时间格式。通过设置系统属性,可以获得Java 8中已有的Java 9格式,例如:

        System.setProperty("java.locale.providers", "CLDR,JRE,SPI");
    

    通过此更改,上面的第一个代码段在Java 8上给出了与在Java 9上相同的输出:

    /·/¨

    这里重要的细节是 CLDR 在属性字符串中位于第一位。优点是您不需要指定自己的格式模式字符串,本地化到其他地区非常简单,一旦切换到Java 9或更高版本,用户不会对行为的变化感到惊讶。

    我正在使用和推荐 java.time ,现代Java日期和时间API。这个 SimpleDateFormat 您在问题中使用的类不仅早已过时,而且也出了名的麻烦。我想你应该完全避免它。现代的API非常好用。

    链接

        2
  •  1
  •   Anonymous    4 年前
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/MM/yyyy");
    
    String date = "16/08/2011";
    Locale arabicLocale = Locale.forLanguageTag("ar-SA");
    DateTimeFormatter arabicDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(arabicLocale).withDecimalStyle(DecimalStyle.of(arabicLocale));
    
    LocalDate today = LocalDate.now(ZoneId.of("Asia/Muscat"));
    today = LocalDate.parse(date, formatter);
    
    String dat = today.format(arabicDateFormatter);
    System.out.println(dat);
    

    输出

        3
  •  0
  •   ssaa    6 年前

    尝试以下方法

    java.util.Locale locale = new java.util.Locale("ar");
    java.text.DecimalFormat df = (java.text.DecimalFormat)
    java.text.DecimalFormat.getNumberInstance(locale);
    
        4
  •  0
  •   Anonymous    6 年前
    DateTime dateTimeObjectInUTC = new DateTime(DateTimeZone.UTC);
    DateTimeZone dateTimeZoneObject = DateTimeZone.forID("Asia/Riyadh");
    
    java.util.Locale locale = new Locale("ar","SA");
    DateTimeFormatter formatter = DateTimeFormat.forStyle("FF").withLocale(locale).withZone(dateTimeZoneObject);
    String output = formatter.print(dateTimeObjectInUTC);
    

    这应该会有帮助!

    我在利用乔达的时间。请参阅Jodatime文档。 DateTimeZone documentation 例如