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

特定设备(三星J7/Android9)出现DateTimeParseException问题求助

解决三星J7(Android 9)上的DateTimeParseException问题

问题重现

在三星J7(Android 9)设备上解析日期字符串 3/30/2023 12:00:00 AM 时触发 DateTimeParseException,报错信息为:

DateTimeParseException: Text '3/30/2023 12:00:00 AM' could not be parsed at index 19

相同代码在Pixel 4模拟器和三星A52s设备上运行正常。

解析代码:

fun numberOfDaysBetweenToday(
    dateTime: String,
    clock: Clock,
    zoneId: ZoneId,
    dateTimeFormatter: DateTimeFormatter
): Long {
    val now = Instant.now(clock).atZone(zoneId)
    val other = LocalDateTime.parse(dateTime, dateTimeFormatter).atZone(zoneId)
    return ChronoUnit.DAYS.between(now, other)
}

调用方式:

numberOfDaysBetweenToday("3/30/2023 12:00:00 AM", ZoneId.of("Asia/Manila"), DateTimeFormatter.ofPattern("M/dd/yyyy h:mm:ss a"))

问题原因

Android 9及更早版本中,部分厂商(如三星)的设备默认Locale可能不是英文,或者系统对DateTimeFormatter的实现依赖系统Locale。当解析包含AM/PM的英文日期字符串时,如果DateTimeFormatter未指定英文Locale,系统会用当前设备的Locale去解析,导致无法识别AM/PM标识,触发解析异常。

解决方案

创建DateTimeFormatter时显式指定英文Locale(如Locale.US),确保解析规则与日期字符串的格式匹配:

修改后的调用代码:

numberOfDaysBetweenToday(
    "3/30/2023 12:00:00 AM",
    ZoneId.of("Asia/Manila"),
    DateTimeFormatter.ofPattern("M/dd/yyyy h:mm:ss a", Locale.US)
)

验证说明

添加指定Locale后,DateTimeFormatter会强制使用英文的上午/下午标识规则解析,不受设备系统Locale影响,可在三星J7等老设备上正常解析目标日期字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:35:15