You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复SimpleDateFormat输出阿拉伯数字日期以适配Firebase存储的问题

固定输出公历拉丁数字日期的修复方案

问题根源

现有代码将Locale.getDefault()传入格式化器,当设备处于阿拉伯语地区时,系统会自动匹配对应区域的阿拉伯-印度数字书写规则,最终输出类似٢٠٢١-٠٤-١٧的非预期格式,无法满足统一存储标准公历数字的需求。

修复逻辑

格式化时不跟随系统默认Locale,手动指定固定使用0-9拉丁数字的Locale实例,从规则层面锁死数字输出形式,无论设备处于哪个区域,都不会出现阿拉伯数字格式的输出。

代码修改对照

原有问题代码:

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

修复后代码,可按需调整格式模板匹配需要的输出样式:

// 指定Locale.US,强制使用拉丁数字,不受设备区域设置影响
// 模板"dd/MM/yyyy"对应输出17/04/2021格式,若需要横杠分隔可替换为"yyyy-MM-dd"
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
String currentDateandTime = df.format(new Date());

注意事项

  • 不要使用无参构造的SimpleDateFormat,该方法同样会默认跟随系统Locale,复现阿拉伯数字输出的问题
  • 兼容Android API 26及以上版本时,优先使用java.time包下的时间格式化能力,搭配公历纪年规则锁死输出:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.US)
        .withChronology(IsoChronology.INSTANCE);
String currentDate = LocalDate.now().format(dtf);
  • 低版本安卓可通过ThreeTenABP库复用上述java.time的实现逻辑,长期来看格式输出的一致性比老版SimpleDateFormat更稳定

内容的提问来源于stack exchange,提问作者MustapTR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 06:15:05