android SimpleDateFormat日期为阿拉伯语

vc9ivgsu  于 2023-04-28  发布在  Android
关注(0)|答案(3)|浏览(222)

我下载了用户的日期数据并将这些数据写入firebase。但是,当从阿拉伯语位置添加数据时,日期格式将无法正常工作。我该如何解决这个问题?
输出:

"٢٠٢١-٠٤-١٧"

我的代码:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
            String currentDateandTime = df.format(new Date());

我不想接收阿拉伯字母的数据。在任何情况下,我都应该将数据视为17/04/2021。而不是//。

5vf7fwbs

5vf7fwbs1#

java.util日期时间API及其格式化接口SimpleDateFormat已经过时且容易出错,建议完全停用,改用modern date-time API *。

使用现代日期时间API:

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfEnglish = DateTimeFormatter.ofPattern("dd/MM/uuuu", Locale.ENGLISH);

        DateTimeFormatter dtfArabic = DateTimeFormatter.ofPattern("dd/MM/uuuu", Locale.ENGLISH)
                .localizedBy(new Locale("ar"));

        // Change the ZoneId as per your requirement e.g. ZoneId.of("Asia/Dubai")
        LocalDate date = LocalDate.now(ZoneId.systemDefault());

        System.out.println(date.format(dtfEnglish));
        System.out.println(date.format(dtfArabic));
    }
}

输出:

18/04/2021
١٨/٠٤/٢٠٢١

从**Trail: Date Time**了解有关现代日期时间API的更多信息。

jgwigjjp

jgwigjjp2#

我建议你使用java.time,现代的Java日期和时间API,用于你的日期工作。如果我知道Firebase不提供date数据类型,那么我认为你需要存储:

String currentDateandTime = LocalDate.now(ZoneId.systemDefault()).toString();
    System.out.println(currentDateandTime);

在我的时区中运行时的输出:
2021-04-17
结果与locale无关。在检索时,one-arg LocalDate.parse(CharSequence)会将相同的字符串解析回LocalDate
编辑:您想要的格式,2021-04-17,是称为ISO 8601的国际标准,我正在利用LocalDate和java.time的其他类从它们的toString方法生成ISO 8601并在它们的one-argx 1 m5n1x方法中解析相同的格式。因此,在处理ISO 8601时(作为一项规则),我们不需要指定格式或格式化程序来进行格式化或解析。如果您想要不同的格式,您可以使用DateTimeFormatter来指定它。

提问:java.time不需要Android API level 26吗?

java.time在较旧和较新的Android设备上都能很好地工作。它只需要至少Java 6

  • 在Java 8和更高版本以及更新的Android设备(从API级别26开始)中,现代API是内置的。
  • 在非Android Java 6和7中,获得ThreeTen Backport,现代类的backport(JSR 310的ThreeTen;见底部的链接)。
  • 在较旧的Android上,可以使用desugaring或Android版的ThreeTen Backport。它被称为ThreeTenABP。在后一种情况下,请确保从org.threeten.bp导入日期和时间类及其子包。

友情链接

siotufzp

siotufzp3#

如果你想在任何情况下将数据作为17/04/2021,你可以将第二个参数改为Locale.US。

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
String currentDateandTime = df.format(new Date());

相关问题