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

Android DateTimeFormatter三星设备时间转换异常求助

解决Android三星设备Locale时间转换异常问题

问题原因

三星设备的Android系统对瑞典语(瑞典)Locale的AM/PM符号实现存在差异,未正确映射为瑞典语标准的"FM"(上午)和"EM"(下午),而是保留了美式的"AM"/"PM",导致时间格式化结果不符合预期。

解决方案

方案一:自定义AM/PM符号映射(推荐)

通过手动指定瑞典语的AM/PM对应符号,完全脱离系统Locale的默认实现,确保所有设备输出一致:

DateTimeFormatter parser = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);
// 构建自定义格式化器,硬编码瑞典语的AM/PM符号
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendPattern("hh:mm ")
        .appendText(ChronoField.AMPM_OF_DAY, Map.of(
                0, "FM", // 对应上午(AM)
                1, "EM"  // 对应下午(PM)
        ))
        .toFormatter(Locale.forLanguageTag("sv-SE"));

LocalTime time = LocalTime.parse("06:45 AM", parser);
String formatted = time.format(formatter);

方案二:验证系统Locale数据(排查用)

如果需要确认问题根源,可以打印三星设备上瑞典语Locale的AM/PM符号,验证系统返回值:

Locale svSe = new Locale("sv", "SE");
DateFormatSymbols symbols = DateFormatSymbols.getInstance(svSe);
String[] amPm = symbols.getAmPmStrings();
// 输出AM/PM符号,若为"AM"/"PM"则说明系统Locale数据异常
Log.d("LocaleCheck", "AM: " + amPm[0] + ", PM: " + amPm[1]);

说明

方案一从根本上避免了系统Locale实现差异带来的问题,是跨设备一致性的最优解;方案二仅用于问题排查,无法直接解决异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:25:34