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

Android中SimpleDateFormat解析时间字符串频繁抛出ParseException问题

排查SimpleDateFormat解析"06:00:00 PM"抛出ParseException的问题

问题根源

本地测试正常但线上频繁崩溃,核心原因是Locale不匹配:

  • 你本地设备处于英文环境,Locale.getDefault()会生成适配英文时间格式的解析器,能正常识别"PM"标识;
  • 线上用户设备的Locale可能是中文、欧洲语言等非英文环境,此时用默认Locale创建的SimpleDateFormat无法解析英文的"AM/PM"标记,直接抛出ParseException。

修复方案

服务器返回的是英文格式的时间字符串,必须强制使用英文Locale来创建解析器,把Locale.getDefault()替换为Locale.US或Locale.ENGLISH即可:

public static String toTimeString(String time, String inTimeFormat, String outTimeFormat) {
    // 强制使用英文Locale解析/格式化英文时间字符串
    DateFormat df1 = new SimpleDateFormat(inTimeFormat, Locale.US);
    DateFormat df2 = new SimpleDateFormat(outTimeFormat, Locale.US);
    String timeString = "";

    try {
        Date date = df1.parse(time);
        timeString = df2.format(date); // 原代码中_12HrTime为未定义变量,此处修正为timeString
    } catch (ParseException e) {
        Crashlytics.recordException(e);
    }
    return timeString;
}

额外注意

  1. 原代码存在未定义变量_12HrTime,已修正为方法内的timeString,避免编译错误;
  2. 如果后续服务器可能返回其他语言的时间格式,需和服务端约定固定Locale,或在响应中携带Locale信息动态适配,但当前场景下固定英文Locale是最直接的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:47:06